作者justaID (快乐崇拜)
看板Flash
标题[问题] 浮点数尾端出现一长串误差值
时间Sun Aug 15 12:51:13 2010
最近用for回圈,针对浮点数测试,如以下
var x=0;
var i:int;
for(i=0;i<100;i++){
x=x+0.1;
trace(x);
}
发现如果相加的差额是整数(如x=x+1),则印出非常正常(1,2,3,.....,99,100)
但如果是浮点数(如x=x+0.1, x=x+0.01),尾端时常会出现误差数值
如以下:
[当x=x+0.1]
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
[当x=x+0.01]
0.01
0.02
0.03
0.04
0.05
0.060000000000000005
0.07
0.08
0.09
0.09999999999999999
0.10999999999999999
这样运算结果就变得不精准
请问有没有解决办法?或是哪里可以调整得精准一点?
如果我只想印出小数点後两位,又该怎麽处理?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.224.127.94
※ 编辑: justaID 来自: 125.224.127.94 (08/15 13:00)
1F:推 LPH66:关於那个误差值请看 08/15 15:51
3F:→ justaID:好完整专业的分析文章@@高手! 我完全没有复杂的运算 08/15 16:12
4F:→ justaID:只有加法 照这文章的可能性分析 应该是数系转换的原因导致 08/15 16:13
5F:→ justaID:误差罗 这看来是难以调整了~"~ 08/15 16:14
6F:→ etrexetrex: Math.floor(x*100)/100; 只输出到小数第二位 08/15 17:09
7F:→ justaID:对耶! 感谢楼上大大!真是点醒梦中人 08/15 19:22
8F:→ ben0209:Number(1.111111).toFixed(2) 08/18 17:00
9F:→ etrexetrex:喔喔 有内建函数!! 08/19 12:55