今晚在写一个程序的时候,不经意间遇到了这样一个问题,各位大侠指教则个。源程序(为了大家能看明白问题,我重新写了一个):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head>
<body>
<input type="text" id="t1" size="20"  onpropertychange="t3.value=t1.value*t2.value;">
<input type="text" id="t2" onpropertychange="t3.value=t1.value*t2.value;" size="20">
<input type="text" id="t3" size="20" >
</body>
</html>
程序本来很简单,就是网页上的三个文本框的计算,第三个等于第一个和第二个的乘积。可问题出在我测试的时候。当我在第一个文本框输入8.2,第二个文本框输入25的时候,第三个的结果竟然是204.99999999999997,这个结果让我百思不得其解,做了一些数据转换什么的,结果也是依旧。各位可以试验一下,看看是不是也这样!后来,又试了其他的几组数据,发现这样的情况还有很多,像是:(2.2,25),(9.2,25),(9.2,24)等等...小可菜鸟一个,程序写的不多,不知道这样的问题大家遇到过没有,是不是我孤陋寡闻了?还请知道原因的大侠不吝赐教,小可这里先谢了!

解决方案 »

  1.   

    精度问题<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>新建网页 1</title>
    </head>
    <body>
    <input type="text" id="t1" size="20" onpropertychange="t3.value=Math.round(t1.value*t2.value*1000)/1000;">
    <input type="text" id="t2" onpropertychange="t3.value=Math.round(t1.value*t2.value*1000)/1000;" size="20">
    <input type="text" id="t3" size="20" >
    </body>
    </html>
      

  2.   

    这是javascript计算的一个弊端,可以通过a*b-Math.round(a*b)的值是否位于0.00000000001之间判断,诺是,则舍去结尾的那段
      

  3.   

    最后用了toFixed(2),保留两位小数...这是昨晚上做的。我想做成一个网页的销售系统,发现用网页进行数据计算,并实时显示真的很麻烦。各位大侠有做过类似的东西吗?
    数据计算都是怎么做的?
      

  4.   

    用Math.round(t1.value*t2.value*1000)/1000计算 8.2*24 结果是196.8 呀 
    精度的位数就是 1000 这里的0的位数,看你要保留几位了。
     
      

  5.   

    hookee大侠的方法是正确的,昨晚上可能我抄错了,刚才又复制粘贴运行了一遍。
    好了!