为了创建跨平台代码,我想用JavaScript开发一个简单的金融应用程序。所需的计算涉及复利和相对较长的十进制数字。我想知道在使用JavaScript进行这种类型的数学运算时应该避免哪些错误--如果可能的话!
发布于 2017-08-08 00:10:40
将每个值按100缩放是解决方案。手工操作可能是无用的,因为您可以找到为您做这件事的库。我推荐moneysafe,它提供了一个非常适合ES6应用程序的函数式API:
const { in$, $ } = require('moneysafe');
console.log(in$($(10.5) + $(.3)); // 10.8
https://github.com/ericelliott/moneysafe
在Node.js和浏览器中均可使用。
发布于 2010-05-21 02:40:06
因为只有两个小数位数,所以没有“精确”的财务计算,但这是一个更普遍的问题。
在JavaScript中,您可以按100缩放每个值,并在每次出现分数时使用Math.round()
。
您可以使用对象来存储数字,并在其原型valueOf()
方法中包含舍入。如下所示:
sys = require('sys');
var Money = function(amount) {
this.amount = amount;
}
Money.prototype.valueOf = function() {
return Math.round(this.amount*100)/100;
}
var m = new Money(50.42355446);
var n = new Money(30.342141);
sys.puts(m.amount + n.amount); //80.76569546
sys.puts(m+n); //80.76
这样,每次您使用货币对象时,它将被表示为四舍五入为两个小数。未四舍五入的值仍然可以通过m.amount
访问。
如果您愿意,您可以在Money.prototype.valueOf()
中内置您自己的舍入算法。
发布于 2019-01-26 04:38:59
https://stackoverflow.com/questions/2876536
复制相似问题