JavaScript 中的简单浮点数学
Simple floating point maths in JavaScript
我需要为网站做一些基本的浮点数学运算(加法和乘法)UI。我知道 Javascript 浮点数由于它们的存储方式而不准确,但我也知道以某种方式可以获得我需要的准确度级别。我知道这一点是因为 Google 的计算器可以计算(在 Goog 中输入 "calculator")..
无论如何,我不想将我的小号码发送回服务器并等待响应,所以我正在尝试使用一个名为 BigNumbers.js 的库,但我可以不管我叫什么,它都不知道如何让它吐出数字(或字符串),它 returns 一个 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
),然后调用 .toString()
当你把它传递给 console.log()
:
console.log(sum.toString());
edit — 另外,正如评论中指出的那样,您应该设置小数位数(可能为 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
我需要为网站做一些基本的浮点数学运算(加法和乘法)UI。我知道 Javascript 浮点数由于它们的存储方式而不准确,但我也知道以某种方式可以获得我需要的准确度级别。我知道这一点是因为 Google 的计算器可以计算(在 Goog 中输入 "calculator")..
无论如何,我不想将我的小号码发送回服务器并等待响应,所以我正在尝试使用一个名为 BigNumbers.js 的库,但我可以不管我叫什么,它都不知道如何让它吐出数字(或字符串),它 returns 一个 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
),然后调用 .toString()
当你把它传递给 console.log()
:
console.log(sum.toString());
edit — 另外,正如评论中指出的那样,您应该设置小数位数(可能为 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