首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中精确的财务计算。Gotchas是什么?

在JavaScript中精确的财务计算。Gotchas是什么?
EN

Stack Overflow用户
提问于 2010-05-21 02:04:37
回答 5查看 68.3K关注 0票数 144

为了创建跨平台代码,我想用JavaScript开发一个简单的金融应用程序。所需的计算涉及复利和相对较长的十进制数字。我想知道在使用JavaScript进行这种类型的数学运算时应该避免哪些错误--如果可能的话!

EN

回答 5

Stack Overflow用户

发布于 2017-08-08 00:10:40

将每个值按100缩放是解决方案。手工操作可能是无用的,因为您可以找到为您做这件事的库。我推荐moneysafe,它提供了一个非常适合ES6应用程序的函数式API:

代码语言:javascript
复制
const { in$, $ } = require('moneysafe');
console.log(in$($(10.5) + $(.3)); // 10.8

https://github.com/ericelliott/moneysafe

在Node.js和浏览器中均可使用。

票数 27
EN

Stack Overflow用户

发布于 2010-05-21 02:40:06

因为只有两个小数位数,所以没有“精确”的财务计算,但这是一个更普遍的问题。

在JavaScript中,您可以按100缩放每个值,并在每次出现分数时使用Math.round()

您可以使用对象来存储数字,并在其原型valueOf()方法中包含舍入。如下所示:

代码语言:javascript
复制
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()中内置您自己的舍入算法。

票数 11
EN

Stack Overflow用户

发布于 2019-01-26 04:38:59

使用decimaljs这是一个非常好的库,它解决了这个问题的一个苛刻的部分……

只要在你的所有操作中使用它。

https://github.com/MikeMcl/decimal.js/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2876536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档