javascript - 在 JavaScript 中使用带小数点的 float 的最佳方法是什么?

标签 javascript floating-point decimal

我做了一个调查,我看到有一个完整的网站向你解释什么是使用 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

虽然我认为这是我能找到的最好的库,但库并没有那么重要。我的主要问题是:

  1. 这是使用像 BigDecimal 这样的库的最佳方式吗?是将 float 用于 JavaScript 的最佳方式吗?还是我错过了什么?我想进行基本计算,例如加法、乘法...e.t.c.
  2. 是否有任何其他建议的方法,例如在 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/

相关文章:

javascript - 如何更改 Highcharts 中的区域线颜色

c# - 非指数格式的 float

python - 为什么 math.log 接受大整数值?

javascript - React.js : Rendering Components from Array of Objects

javascript - Electron Packager - 使用相对路径

javascript - 制作脚本书签

c++ - 我怎样才能调整这些功能,使其即使在值范围的极端情况下也能正常工作? (逆对数)

mysql - 如何将 DECIMAL 插入 MySQL 数据库

java - double 、逗号和点

python - 如何在python中将 float 转换为定点小数