货币计算程序

也是在经典看到的帖子,原文地址http://bbs.blueidea.com/thread-3051472-1-3.html

规则如下
1金=100银;1银=100铜;1铜=100铁;银币、铜币、铁币最高额为99,金币无限制。
1银等价于1人民币
通过用户输入 金币 银币 铜币 铁币的数值 计算能得到多少人民币!

第一次遭遇整数和小数相加的精度问题,因为预知小数的位数,所以采用toFixed来控制输出,但是自知这不是好方法。望高手指点。

通过baidu,找到这个处理浮点运算误差问题的函数。这个函数只是处理加法的运算,还有处理减法、乘法、除法的函数,可以上网找找。

function accAdd(arg1,arg2,arg3,arg4) {
    var r1,r2,r3,r4,m;
    try{r1=arg1.toString().split(".")[1].length;}catch(e){r1=0;}
    try{r2=arg2.toString().split(".")[1].length;}catch(e){r2=0;}
    try{r3=arg3.toString().split(".")[1].length;}catch(e){r3=0;}
    try{r4=arg4.toString().split(".")[1].length;}catch(e){r4=0;}
    m = Math.pow(10,Math.max(r1,r2,r3,r4));
    return (arg1*m+arg2*m+arg3*m+arg4*m)/m;
}

 

完整的代码如下:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>货币计算程序</title>
 6 <style type="text/css">
 7 input { width:50px; }
 8 #rmb { color:#f00; display:block; }
 9 </style>
10 </head>
11 <body>
12 <p>请在下面输入金币、银币、铜币以及铁币,然后转换成人民币。</p>
13 <p>注意:银币、铜币和铁币数量不得大于99,金币无限制。</p>
14 <p>金币:<input type="text" id="gold" value="0" /> <br />银币:<input type="text" id="silver" value="0" /> <br />铜币:<input type="text" id="copper" value="0" /> <br />铁币:<input type="text" id="iron" value="0" /> <br /><button id="count">计算</button> <span id="rmb"></span></p>
15 <script type="text/javascript">
16 $ = function(id){
17     return document.getElementById(id);    
18 }
19 $("silver").onblur = $("copper").onblur = $("iron").onblur = checkNum;
20 $("count").onclick = exchange;
21 function checkNum() {
22     if(this.value > 99) {
23         alert("不能大于99");
24         this.value = 0;
25     }
26 }
27 function exchange() {
28     var gRmb = $("gold").value*100;
29     var sRmb = $("silver").value*1;
30     var cRmb = $("copper").value*0.01;
31     var iRmb = $("iron").value*0.0001;
32     $("rmb").innerHTML = "结果:" + accAdd(gRmb,sRmb,cRmb,iRmb);
33 }
34 function accAdd(arg1,arg2,arg3,arg4) {
35     var r1,r2,r3,r4,m;
36     try{r1=arg1.toString().split(".")[1].length;}catch(e){r1=0;}
37     try{r2=arg2.toString().split(".")[1].length;}catch(e){r2=0;}
38     try{r3=arg3.toString().split(".")[1].length;}catch(e){r3=0;}
39     try{r4=arg4.toString().split(".")[1].length;}catch(e){r4=0;}
40     m = Math.pow(10,Math.max(r1,r2,r3,r4));
41     return (arg1*m+arg2*m+arg3*m+arg4*m)/m;
42 }
43 </script>
44 </body>
45 </html>

 

 

 

posted @ 2012-05-07 11:20  长风freedom  阅读(182)  评论(0编辑  收藏  举报