`

hao123网址之家--智能计算器 js源代码

    博客分类:
  • js
阅读更多

http://www.hao123.com/haoserver/jishuqii.htm


源代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type=text/css>
td,body { font-size: 13px;}body{
    margin-top:0px;
    margin-left:0px;
    margin-right:0px;
    background-color: #fcfff7;
}
</style>
<title>hao123网址之家--智能计算器</title>

<SCRIPT language=javascript>
<!--
var endNumber=true
var mem=0
var carry=10
var hexnum="0123456789abcdef"
var angle="d"
var stack=""
var level="0"
var layer=0

//数字键

function inputkey(key)
{
    var index=key.charCodeAt(0);
    if ((carry==2 && (index==48 || index==49))
    || (carry==8 && index>=48 && index<=55)
    || (carry==10 && (index>=48 && index<=57 || index==46))
    || (carry==16 && ((index>=48 && index<=57) || (index>=97 && index<=102))))
    if(endNumber)
    {
        endNumber=false
        document.calc.display.value = key
    }
    else if(document.calc.display.value == null || document.calc.display.value == "0")
        document.calc.display.value = key
    else
        document.calc.display.value += key
}

function changeSign()
{
    if (document.calc.display.value!="0")
        if(document.calc.display.value.substr(0,1) == "-")
            document.calc.display.value = document.calc.display.value.substr(1)
        else
            document.calc.display.value = "-" + document.calc.display.value
}

//函数键

function inputfunction(fun,shiftfun)
{
    endNumber=true
    if (document.calc.shiftf.checked)
        document.calc.display.value=decto(funcalc(shiftfun,(todec(document.calc.display.value,carry))),carry)
    else
        document.calc.display.value=decto(funcalc(fun,(todec(document.calc.display.value,carry))),carry)
    document.calc.shiftf.checked=false
    document.calc.hypf.checked=false   
    inputshift()
}

function inputtrig(trig,arctrig,hyp,archyp)
{
    if (document.calc.hypf.checked)
        inputfunction(hyp,archyp)
    else
        inputfunction(trig,arctrig)
}


//运算符

function operation(join,newlevel)
{
    endNumber=true
    var temp=stack.substr(stack.lastIndexOf("(")+1)+document.calc.display.value
    while (newlevel!=0 && (newlevel<=(level.charAt(level.length-1))))
    {
        temp=parse(temp)
        level=level.slice(0,-1)
    }
    if (temp.match(/^(.*\d[\+\-\*\/\%\^\&\|x])?([+-]?[0-9a-f\.]+)$/))
        document.calc.display.value=RegExp.$2
    stack=stack.substr(0,stack.lastIndexOf("(")+1)+temp+join
    document.calc.operator.value=" "+join+" "
    level=level+newlevel
   
}

//括号

function addbracket()
{
    endNumber=true
    document.calc.display.value=0
    stack=stack+"("
    document.calc.operator.value="   "
    level=level+0
   
    layer+=1
    document.calc.bracket.value="(="+layer
}

function disbracket()
{
    endNumber=true
    var temp=stack.substr(stack.lastIndexOf("(")+1)+document.calc.display.value
    while ((level.charAt(level.length-1))>0)
    {
        temp=parse(temp)
        level=level.slice(0,-1)
    }
   
    document.calc.display.value=temp
    stack=stack.substr(0,stack.lastIndexOf("("))
    document.calc.operator.value="   "
    level=level.slice(0,-1)

    layer-=1
    if (layer>0)
        document.calc.bracket.value="(="+layer
    else
        document.calc.bracket.value=""
}

//等号

function result()
{
    endNumber=true
    while (layer>0)
        disbracket()
    var temp=stack+document.calc.display.value
    while ((level.charAt(level.length-1))>0)
    {
        temp=parse(temp)
        level=level.slice(0,-1)
    }

    document.calc.display.value=temp
    document.calc.bracket.value=""
    document.calc.operator.value=""
    stack=""
    level="0"
}


//修改键

function backspace()
{
    if (!endNumber)
    {
        if(document.calc.display.value.length>1)
            document.calc.display.value=document.calc.display.value.substring(0,document.calc.display.value.length - 1)
        else
            document.calc.display.value=0
    }
}

function clearall()
{
    document.calc.display.value=0
    endNumber=true
    stack=""
    level="0"
    layer=""
    document.calc.operator.value=""
    document.calc.bracket.value=""
}


//转换键

function inputChangCarry(newcarry)
{
    endNumber=true
    document.calc.display.value=(decto(todec(document.calc.display.value,carry),newcarry))
    carry=newcarry

    document.calc.sin.disabled=(carry!=10)
    document.calc.cos.disabled=(carry!=10)
    document.calc.tan.disabled=(carry!=10)
    document.calc.bt.disabled=(carry!=10)
    document.calc.pi.disabled=(carry!=10)
    document.calc.e.disabled=(carry!=10)
    document.calc.kp.disabled=(carry!=10)
               
    document.calc.k2.disabled=(carry<=2)
    document.calc.k3.disabled=(carry<=2)
    document.calc.k4.disabled=(carry<=2)
    document.calc.k5.disabled=(carry<=2)
    document.calc.k6.disabled=(carry<=2)
    document.calc.k7.disabled=(carry<=2)
    document.calc.k8.disabled=(carry<=8)
    document.calc.k9.disabled=(carry<=8)
    document.calc.ka.disabled=(carry<=10)
    document.calc.kb.disabled=(carry<=10)
    document.calc.kc.disabled=(carry<=10)
    document.calc.kd.disabled=(carry<=10)
    document.calc.ke.disabled=(carry<=10)
    document.calc.kf.disabled=(carry<=10)

   
   
}

function inputChangAngle(angletype)
{
    endNumber=true
    angle=angletype
    if (angle=="d")
        document.calc.display.value=radiansToDegress(document.calc.display.value)
    else
        document.calc.display.value=degressToRadians(document.calc.display.value)
    endNumber=true
}

function inputshift()
{
    if (document.calc.shiftf.checked)
    {
        document.calc.bt.value="deg "
        document.calc.ln.value="exp "
        document.calc.log.value="expd "
       
        if (document.calc.hypf.checked)
        {
            document.calc.sin.value="ahs "
            document.calc.cos.value="ahc "
            document.calc.tan.value="aht "
        }
        else
        {
            document.calc.sin.value="asin "
            document.calc.cos.value="acos "
            document.calc.tan.value="atan "
        }
       
        document.calc.sqr.value="x^.5 "
        document.calc.cube.value="x^.3 "
       
        document.calc.floor.value=" 小数 "
    }
    else
    {
        document.calc.bt.value="d.ms "
        document.calc.ln.value=" ln "
        document.calc.log.value=" log "

        if (document.calc.hypf.checked)
        {
            document.calc.sin.value="hsin "
            document.calc.cos.value="hcos "
            document.calc.tan.value="htan "
        }
        else
        {
            document.calc.sin.value="sin "
            document.calc.cos.value="cos "
            document.calc.tan.value="tan "
        }
       
        document.calc.sqr.value="x^2 "
        document.calc.cube.value="x^3 "
       
        document.calc.floor.value=" 取整 "
    }

}
//存储器部分

function clearmemory()
{
    mem=0
    document.calc.memory.value="   "
}

function getmemory()
{
    endNumber=true
    document.calc.display.value=decto(mem,carry)
}

function putmemory()
{
    endNumber=true
    if (document.calc.display.value!=0)
    {
        mem=todec(document.calc.display.value,carry)
        document.calc.memory.value=" M "
    }
    else
        document.calc.memory.value="   "
}

function addmemory()
{
    endNumber=true
    mem=parseFloat(mem)+parseFloat(todec(document.calc.display.value,carry))
    if (mem==0)
        document.calc.memory.value="   "
    else
        document.calc.memory.value=" M "
}

function multimemory()
{
    endNumber=true
    mem=parseFloat(mem)*parseFloat(todec(document.calc.display.value,carry))
    if (mem==0)
        document.calc.memory.value="   "
    else
        document.calc.memory.value=" M "
}

//十进制转换

function todec(num,oldcarry)
{
    if (oldcarry==10 || num==0) return(num)
    var neg=(num.charAt(0)=="-")
    if (neg) num=num.substr(1)
    var newnum=0
    for (var index=1;index<=num.length;index++)
        newnum=newnum*oldcarry+hexnum.indexOf(num.charAt(index-1))
    if (neg)
        newnum=-newnum
    return(newnum)
}

function decto(num,newcarry)
{
    var neg=(num<0)
    if (newcarry==10 || num==0) return(num)
    num=""+Math.abs(num)
    var newnum=""
    while (num!=0)
    {
        newnum=hexnum.charAt(num%newcarry)+newnum
        num=Math.floor(num/newcarry)
    }
    if (neg)
        newnum="-"+newnum
    return(newnum)
}

//表达式解析

function parse(string)
{
    if (string.match(/^(.*\d[\+\-\*\/\%\^\&\|x\<])?([+-]?[0-9a-f\.]+)([\+\-\*\/\%\^\&\|x\<])([+-]?[0-9a-f\.]+)$/))
        return(RegExp.$1+cypher(RegExp.$2,RegExp.$3,RegExp.$4))
    else
        return(string)
}

//数学运算和位运算

function cypher(left,join,right)
{
    left=todec(left,carry)
    right=todec(right,carry)
    if (join=="+")
        return(decto(parseFloat(left)+parseFloat(right),carry))
    if (join=="-")
        return(decto(left-right,carry))
    if (join=="*")
        return(decto(left*right,carry))
    if (join=="/" && right!=0)
        return(decto(left/right,carry))
    if (join=="%")
        return(decto(left%right,carry))
    if (join=="&")
        return(decto(left&right,carry))
    if (join=="|")
        return(decto(left|right,carry))
    if (join=="^")
        return(decto(Math.pow(left,right),carry))

    if (join=="x")
        return(decto(left^right,carry))
    if (join=="<")
        return(decto(left<<right,carry))
    alert("除数不能为零")
    return(left)
}

//函数计算

function funcalc(fun,num)
{
    with(Math)
    {
        if (fun=="pi")
            return(PI)
        if (fun=="e")
            return(E)

        if (fun=="abs")
            return(abs(num))
        if (fun=="ceil")
            return(ceil(num))
        if (fun=="round")
            return(round(num))

        if (fun=="floor")
            return(floor(num))
        if (fun=="deci")
            return(num-floor(num))


        if (fun=="ln" && num>0)
            return(log(num))
        if (fun=="exp")
            return(exp(num))
        if (fun=="log" && num>0)
            return(log(num)*LOG10E)
        if (fun=="expdec")
            return(pow(10,num))

       
        if (fun=="cube")
            return(num*num*num)
        if (fun=="cubt")
            return(pow(num,1/3))
        if (fun=="sqr")
            return(num*num)
        if (fun=="sqrt" && num>=0)
            return(sqrt(num))

        if (fun=="!")
            return(factorial(num))

        if (fun=="recip" && num!=0)
            return(1/num)
       
        if (fun=="dms")
            return(dms(num))
        if (fun=="deg")
            return(deg(num))

        if (fun=="~")
            return(~num)
   
        if (angle=="d")
        {
            if (fun=="sin")
                return(sin(degressToRadians(num)))
            if (fun=="cos")
                return(cos(degressToRadians(num)))
            if (fun=="tan")
                return(tan(degressToRadians(num)))

            if (fun=="arcsin" && abs(num)<=1)
                return(radiansToDegress(asin(num)))
            if (fun=="arccos" && abs(num)<=1)
                return(radiansToDegress(acos(num)))
            if (fun=="arctan")
                return(radiansToDegress(atan(num)))
        }
        else
        {
            if (fun=="sin")
                return(sin(num))
            if (fun=="cos")
                return(cos(num))
            if (fun=="tan")
                return(tan(num))

            if (fun=="arcsin" && abs(num)<=1)
                return(asin(num))
            if (fun=="arccos" && abs(num)<=1)
                return(acos(num))
            if (fun=="arctan")
                return(atan(num))
        }
   
        if (fun=="hypsin")
            return((exp(num)-exp(0-num))*0.5)
        if (fun=="hypcos")
            return((exp(num)+exp(-num))*0.5)
        if (fun=="hyptan")
            return((exp(num)-exp(-num))/(exp(num)+exp(-num)))

        if (fun=="ahypsin" | fun=="hypcos" | fun=="hyptan")
        {
            alert("对不起,公式还没有查到!")
            return(num)
        }
       
        alert("超出函数定义范围")
        return(num)
    }
}

function factorial(n)
{
    n=Math.abs(parseInt(n))
    var fac=1
    for (;n>0;n-=1)
        fac*=n
    return(fac)
}

function dms(n)
{
    var neg=(n<0)
    with(Math)
    {   
        n=abs(n)
        var d=floor(n)
        var m=floor(60*(n-d))
        var s=(n-d)*60-m
    }
    var dms=d+m/100+s*0.006
    if (neg)
        dms=-dms
    return(dms)
}

function deg(n)
{
    var neg=(n<0)
    with(Math)
    {
        n=abs(n)
        var d=floor(n)
        var m=floor((n-d)*100)
        var s=(n-d)*100-m
    }
    var deg=d+m/60+s/36
    if (neg)
        deg=-deg
    return(deg)
}

function degressToRadians(degress)
{
    return(degress*Math.PI/180)
}

function radiansToDegress(radians)
{
    return(radians*180/Math.PI)
}

//界面

//-->
</SCRIPT>

分享到:
评论

相关推荐

    好用123网址之家程序下载(2010年最新版本)-好用123整站程序

    2010年最新版本网址导航好用123整站程序,新一轮更新修正现在公开发布啦,为了让更多的网友们快速架设自己的导航网站,本程序会不定期更新,敬请关注.好用123程序是纯html版,采用div+css构建,让网站打开的速度更快.本...

    hao123 网址之家 上网导航 源码

    【标题】:“hao123 网址之家 上网导航 源码”指的是hao123网站的源代码,这是一个知名的网址导航站点,它为用户提供了一个方便快捷的互联网入口,集成了各类常用网站的链接。hao123的成功在于其简洁的界面设计和对...

    仿hao123网址之家导航html模板下载_网址之家 网址导航 绿色 中文 hao123.zip

    总的来说,这个“仿hao123网址之家导航html模板”提供了一个现成的框架,帮助开发者快速创建一个类似hao123的网址导航网站,通过自定义HTML、CSS和JavaScript代码,可以根据需求进行个性化定制,打造出独具特色的...

    仿hao123网址之家导航html模板下载_网址之家 网址导航 绿色 中文 hao123_html网站模板_网页源码移.rar

    该压缩包文件包含的是一个仿hao123的网址导航网站模板,主要由HTML、CSS和JavaScript技术构建。这个模板的设计风格与知名的hao123网站相似,旨在为用户提供简洁、高效的网页导航服务。下面我们将详细探讨这些技术...

    仿hao123网址之家导航html模板下载-网址之家 网址导航 绿色 中文 hao123.rar

    hao123是中国非常知名的网址导航站,它的成功在于简洁的界面和广泛的网址分类。 3. 绿色主题:在网页设计中,颜色方案是关键因素之一。绿色主题通常给人带来清新、自然的感觉,有助于提升用户的视觉舒适度,尤其...

    高仿hao123网址之家源码-广东宽带版

    《高仿hao123网址之家源码-广东宽带版》是一款针对互联网用户设计的网页导航源码,旨在提供类似好123网址之家的用户体验,特别优化了广东宽带网络环境下的访问性能。该源码经过全面测试,确保在各种浏览器及设备上...

    hao123网址之家 host修复工具

    可以修复病毒等引起的host破坏,或者对屏蔽的host进行修复,很好用的

    比hao123、1616、256还要好的网址之家源程序和源代码

    【标题】"比hao123、1616、256还要好的网址之家源程序和源代码"指的是一个可能的网站导航系统,它声称在功能或用户体验上超越了知名的hao123、1616和256等网址导航站。这个系统的核心在于它的源代码和源程序,它们是...

    Hao521网址之家静态版

    "源代码"和"源码"标签揭示了Hao521网址之家的实现细节是公开的,开发者可以研究其结构、修改功能,甚至用于自己的项目。"资料"标签则暗示了这个项目可能附带了一些关于如何使用、定制和部署的文档或教程。 在【压缩...

    完美仿hao123网址导航(完整版),ASP带后台.rar

    默认后台地址:/admin/login.asp 默认用户:admin 默认密码: 19951010 完美仿hao123网址导航更新记录: 2010-1-11 最新修复网站放在子目录上栏目页样式问题,有此问题的用户请下载最新版覆盖修复。2010-1-15 同步...

    小树芽仿hao123网址之家 v3.1

    小树芽网址站ASP开源源码正式发布,本程序源码由小树芽网址站独立开发,更新hao123最新样式和分类,是目前仿hao123最真的网站(截至2012-03-27)。 关于网站LOGO修改: 首页网站标志LOGO目录位置:/images/logo_...

    4997.com网址之家源码-精仿haO123.com无需数据库版本

    4997网址之家 始建于2005年5月,原名“精彩实用网址”。本站的宗旨是方便网友们快速找到自己需要的网站,而不用去记太多复杂的网址;同时也提供了搜索引擎入口,可搜索各种资料及网站。到目前为止,4997网址之家已经...

    hao123.com网址之家最新版-秋季版 v8.1

    摘要:ASP源码,网址链接,HAO123网址之家,网址导航 网址之家秋季版,源码爱好者对一些失效网址进行了修改,当然,你自己也可以根据您的需要重新更改!  HAO123始建于1999年5月,前身是"精彩实用网址",后来改名为"好...

    hao123源码

    hao123网址之家 始建于1999年5月,原名“精彩实用网址”。hao123网站的宗旨是方便网友们快速找到自已需要的网站,而不用去记太多复杂的网址;同时也提供了搜索引擎入口,可搜索各种资料及网站。到目前为止,好123...

    hao123网址之家推出的host文件修复工具

    该工具能够修复由病毒等导致的问题所引起的host文件损坏,同时也能解决被屏蔽的host文件。实用性强。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    hao123php版

    hao123网址之家 始建于1999年5月,原名“精彩实用网址”。hao123网站的宗旨是方便网友们快速找到自已需要的网站,而不用去记太多复杂的网址;同时也提供了搜索引擎入口,可搜索各种资料及网站。到目前为止,好123...

    HAO123整站源码下载

    hao123网址之家 始建于1999年5月,原名“精彩实用网址”。hao123网站的宗旨是方便网友们快速找到自已需要的网站,而不用去记太多复杂的网址;同时也提供了搜索引擎入口,可搜索各种资料及网站。到目前为止,好123...

    hao123网址导航源码

    关于hao123 hao123---百度(baidu.com)旗下网站,创建于1999年5月,是中国最早的上网导航站点,经过10余年的发展,已成为亿万用户上网的第一站、中文上网导航的第一品牌。 hao123,让上网更简单! hao123始终...

Global site tag (gtag.js) - Google Analytics