也是在经典看到的帖子,原文地址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>