我做了一个调查,我看到有一个完整的网站向你解释什么是使用 float 的正确方法:http://floating-point-gui.de/
例如,在 Java 中,我总是将 BigDecimal 用于 float ,只是为了确保一切都能正常工作而不会让我感到困惑。例如:
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
这样的库的最佳方式吗?是将 float 用于 JavaScript 的最佳方式吗?还是我错过了什么?我想进行基本计算,例如加法、乘法...e.t.c. - 是否有任何其他建议的方法,例如在 JavaScript 中添加两个 float ?
例如,假设我想要: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 中的所有数字都是 64 位的,一般来说,在 javascript 中进行浮点运算的最佳方法是直接使用数字。
但是,如果您特别遇到需要比 64 位提供的精度更高的问题,那么您需要执行类似的操作。
但是,我敦促您认真考虑您是否有这样的用例。
如果您的问题是一些影响您比较的远小数,可以使用一些函数来专门处理这类事情。我强烈建议您查看 Number.prototype.toFixed(n) 函数并查看 this dicussion on almostEquals它建议您结合使用 epsilon 进行 float 比较。
关于javascript - 在 JavaScript 中使用带小数点的 float 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707971/