JavaScript中的简单浮点数学

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的简单浮点数学相关的知识,希望对你有一定的参考价值。

我需要为网站用户界面做一些基本的浮点数学(添加和倍增钱)。我知道javascript浮动因为它们的存储方式不准确,但我也知道不知何故,我可以获得所需的准确度。我知道这是因为谷歌的计算器可以做到这一点(在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),然后在将qzxswpoi传递给.toString()时调用console.log()

console.log(sum.toString());

编辑 - 同样,如评论中所指出的,您应该设置小数位数(可能是2)并设置舍入模式。你可以通过BigNumber.config()电话来做到这一点。

另一答案

您可以使用JavaScript浮动值和用于舍入美分的Math.round(..)方法:

var floats = [145, 1.44, 1.3];

sum = 1;

for (i=0; i<floats.length; i++){
  sum = Math.round(sum * floats[i] * 100)/100;
}

console.log(sum.toFixed(2)); // expecting 271.44

以上是关于JavaScript中的简单浮点数学的主要内容,如果未能解决你的问题,请参考以下文章

浮点数学被破坏了吗?

浮点数学是否破碎?

你可能不知道的JavaScript代码片段和技巧(下)

你可能不知道的JavaScript代码片段和技巧(上)

C 语言:使用计算初始化浮点变量

C# 中的浮点数学是不是一致?是真的吗?