如何修复大数字的{javascript float rounding错误

时间:2018-06-11 17:15:35

标签: javascript floating-point numbers

我正在尝试编写一个计算和显示加密货币值的函数,减去费用(为简单起见,示例中为-0.10000000)。

但我不能让它显示大数字的正确值(因为这与货币有关,正确的值有点重要)......

请查看此小提琴https://jsfiddle.net/vbr3q0u1/19/以查看问题。

我的第一个想法是

$('#result').text(amount ? (amount + fees).toFixed(8) > 0 ? (amount + fees).toFixed(8) : 0 : 0)

但是会产生以下结果:

10000000.55555555 // 10000000.45555555  (correct)
100000000.55555555 // 100000000.45555556 (off by .00000001)
1000000000.55555555 // this time the INPUT div shows 1000000000.55555558
10000000000.55555555 // input shows 10000000000.55555534, result shows 10000000000.45555496

所以那里显然有些不对劲...... 所以我想“好吧,我知道javascript与浮动很奇怪,我总是听说最好转换为int,计算,然后转换回浮动”。

所以我试过

$('#result').text(amount ? (amount + fees).toFixed(8) > 0 ? (((amount + fees) * 100000000) / 100000000) : 0 : 0)

以下结果:

10000000.55555555 // 10000000.45555555 (correct)
100000000.55555555 // 100000000.45555556 (same as above, so there's a pattern here)
1000000000.55555555 // 1000000000.55555558 / 1000000000.4555556 (yup, same values as above)
10000000000.55555555 // 10000000000.55555534 / 10000000000.455555 (now it's getting weird)
...
100000000000000.55555555 // shows 100000000000000.56250000 as input and 100000000000000.47 as result...

所以我显然做错了什么.. 我怎样才能使函数正确计算结果(8位小数)以及在两次尝试中我做错了什么?

非常感谢你:)

修改

是的..我知道(正如我在我的问题中写的那样)浮动数学被打破了。但我的问题是我如何正确地转换/等数字以获得正确的结果,以及我尝试这样做的方式有什么不对

0 个答案:

没有答案