【发布时间】:2014-07-11 23:16:45
【问题描述】:
我做了调查,看到有一个完整的网站向你解释什么是正确的使用浮点数的方法是:http://floating-point-gui.de/
例如,在 Java 中,我一直使用 BigDecimal 作为浮点数,只是为了确保一切正常工作而不会让我感到困惑。例如:
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal c = a.add(b); // returns a BigDecimal representing exactly 0.3
// instead of this number: 0.30000000000000004 that can
// easily confuse me
但是在 JavaScript 中,我意识到没有内置库之类的东西(至少在我看过的 Math 对象中)
所以到目前为止,我发现的最好的方法是使用一个 JavaScript 库,它正是这样做的!在我的项目中,我使用的是这个:https://github.com/dtrebbien/BigDecimal.js
虽然我认为这是我能找到的最好的图书馆,但图书馆并没有那么重要。我的主要问题是:
- 使用像
BigDecimal这样的库是最好的方式吗?还是我错过了什么?我想做基本的计算,比如加法、乘法...等。 - 有没有其他建议的方法,例如在 JavaScript 中添加两个浮点数?
例如,假设我想要:0.1 + 0.2。使用BigDecimal 库,我将拥有:
var a = new BigDecimal("0.1");
var b = new BigDecimal("0.2");
console.log(a.add(b).toString()); //returns exactly 0.3
那么有没有其他方法可以在 JavaScript 中添加 0.1 + 0.2 并恰好得到 0.3,而无需实际舍入数字? 作为参考,下面的 JavaScript 示例将不起作用:
var a = 0.1;
var b = 0.2;
console.log(a + b); //This will have as an output: 0.30000000000000004
【问题讨论】:
-
如果您真的不想使用本机二进制浮点,那么您正在做正确的事情(一些变体)。
标签: javascript floating-point decimal