我正在做一些浮动操作并最终得到以下数字:
-0.5 -0.4 -0.3000000000000000004 -0.2000000000000000004 -0.1000000000000000003 1.10E-16 0.1 0.2 0.30000000000000000004 0.4 0.5
算法如下:
var inc:Number = nextMultiple(min, stepSize); trace(String(inc)); private function nextMultiple(x:Number, y:Number) { return Math.ceil(x/y)*y; }
我理解浮点数不能总是在一个字节中准确表示.例如1/3.我也知道我的步数为0.1.如果我有步骤,我怎么能得到一个正确的输出?
奇怪的是,这是我第一次遇到这种类型的问题.也许我玩不够漂浮.
与语言无关的解决方案是将您的数字存储为整数步数,前提是您知道步长而不是浮点数.
一个非语言不可知的解决方案是找出你的语言printf的实现.
printf ("float: %.1f\n", number);