如何修复浮点不精确的输出?

cou*_*lix 4 language-agnostic algorithm math floating-point actionscript-3

我正在做一些浮动操作并最终得到以下数字:

-0.5
-0.4
-0.3000000000000000004
-0.2000000000000000004
-0.1000000000000000003
1.10E-16
0.1
0.2
0.30000000000000000004
0.4
0.5
Run Code Online (Sandbox Code Playgroud)

算法如下:

var inc:Number = nextMultiple(min, stepSize);
trace(String(inc));

private function nextMultiple(x:Number, y:Number) {
    return Math.ceil(x/y)*y;
}
Run Code Online (Sandbox Code Playgroud)

我理解浮点数不能总是在一个字节中准确表示.例如1/3.我也知道我的步数为0.1.如果我有步骤,我怎么能得到一个正确的输出?

奇怪的是,这是我第一次遇到这种类型的问题.也许我玩不够漂浮.

Bil*_*ard 8

与语言无关的解决方案是将您的数字存储为整数步数,前提是您知道步长而不是浮点数.

一个非语言不可知的解决方案是找出你的语言printf的实现.

printf ("float: %.1f\n", number);
Run Code Online (Sandbox Code Playgroud)