作者elan (IE是最棒的浏览器)
看板Web_Design
标题Re: [问题] 请教一下java script算数学有误差的问题?
时间Sat Jul 29 04:15:10 2006
※ 引述《kicksmile (aa)》之铭言:
: function cal(){
: sum.value='$ '+(t11+t22+t33+t44+t55);
: }
: function callbylist1(){
: t11=i1.value*q1.value;// i1.value是物品价钱,q1.value是client输入的数量
: cal(); //call cal()去算总total
: }
: .
: .
: .
: function callbylist5(){
: t55=i5.value*q5.value;
: cal();
: }
: 可是算出来有时候会出现误差
: 有时候又会正常
: 正常是没有小数点的,因为都是整数相乘
: 但有时会出现这种情形59.849999999999994
: 请问有人有相同情形吗要怎麽解决呢
: 谢谢
: 从网路查了一下,有篇文章是说javascript计算都会有此问题,浮点数运算问题
呵呵 这可不是"JavaScript"本身的问题喔 这是我们二进位电脑的先天"缺陷"
以我们电脑系统base 2的浮点数格式要去计算表示base 10的实数系统本来就会有
不可避免的误差(在这系统下 你也只能以最接近的二进位可表示的数值去表示部份实数值)
你用C语言写也一样:
float v1 = 100;
float v2 = 0.1;
if ((v1 * v2) == 10)
printf("这真是个完美的世界!");
else
printf("这世界就是这样~");
: 所以要display的话,可以用Math.round()解决这个问题
: 如要精确到小数第二位,就乘100, round,在除以100
: x=Math.round( x* 100 ) /100
: 详细内容转自http://www.takka.com.hk/jstutor/ch18/ch18.htm
: 不过这个方法颇呆,不知道有没有更聪明的方法哈
不, 这方法颇好 反正你也只能求某个程度的精准
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.6.24