javascript - JavaScript 中的简单 float 学

标签 javascript math floating-point bignum

我需要为网站 UI 做一些基本的 float 学运算(金钱的加法和乘法)。我知道 Javascript float 由于存储方式的原因并不准确,但我也知道以某种方式,可以获得我所需的准确度。我知道这一点是因为 Google 的计算器可以做到这一点(在 Goog 中输入“计算器”)..

无论如何,我不想将我的小数字发送回服务器并等待响应,所以我尝试使用一个名为 BigNumbers.js 的库,但我不知道如何让它吐出数字(或字符串),无论我调用什么,它都会返回一个 BigNumber 对象。

这是我的测试代码:JSFiddle

floats = [145, 1.44, 1.3];

sum = new BigNumber(0);

for(i=0; i<floats.length; i++){
    sum = sum.times(floats[i]);
}

// sum = sum.toDigits(); //returns object
// sum = sum.toString(); //returns 0

console.log(sum); // expecting 271.44, getting object

怎样才能达到预期的效果?如果有更好的库可供使用,这也是一个可以接受的答案。

谢谢。

最佳答案

您需要将 sum 初始化为 1 而不是 0(并且可能将其名称更改为 product) >),然后在将其传递给 console.log() 时调用 .toString():

console.log(sum.toString());

编辑 - 另外,正如评论中指出的,您应该设置小数位数(可能为 2)并设置舍入模式。您可以通过 BigNumber.config() 调用来完成此操作。

关于javascript - JavaScript 中的简单 float 学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32724987/

相关文章:

javascript - 如何在不遍历的情况下找到数组中最接近的数字?

c# - 在 .NET 中识别替代日期(在 PowerShell、C# 或 VB 中)

c - 使用函数的程序说明

java - 仅当使用自定义 Vector 类时,添加负零浮点结果才为 1.0f

javascript - jQuery .on() 无法正常工作

javascript - 对使用 ng-repeat 的电子邮件 ID 应用自然排序

javascript - 如何知道模糊的原因?

javascript - 圆圈、 Canvas 和数学,天哪

c++ - 如何将字符串转换为 float 数组?

java - 使用 == 运算符比较 float/double 值