省钱整数

我们在Mongoose模式中有下面的代码试图将钱转换为整数保存在MongoDB中:

amount: { type: Number, get: getAmount, set: setAmount, required: true} function setAmount(num) { return num * 100; } function getAmount(num) { return (num / 100).toFixed(2); } 

不过节省了64.49我们仍然在MongoDB文件中得到这个结果:

 "amount": 6448.999999999999 

我们如何解决这个问题?

为了避免这些“钱”变数的精确问题,我总是用“仙”作为单位。

不要存储15.24美元,在你的代码中存储1524美分。

然后使用整数进行所有操作。

然后使用美分=>美元转换只显示,通过添加“。” 最后两个字符之前的分隔符。

考虑使用BigNumber: http ://mikemcl.github.io/bignumber.js/

小例子(在控制台中):

 > 0.2 * 0.4 < 0.08000000000000002 

BigNumber

 > var a = new BigNumber(0.2); > var b = new BigNumber(0.4); > var c = a.times(b); > c.valueOf(); < "0.08" 

这是否满足您的需求?

 function convert(number) { const [i, d] = ('' + number).split(/\./); const a = +i * 100; const b = +(d || '0').slice(0, 2); const c = +(d || '0').slice(2)? 1 : 0; return a + b + c; } 

这是旧版本,没有.0099999

 function convert(number) { const [a, b] = ('' + number).split(/\./); return +a * 100 + +(b || '0').slice(0, 2); } 

它收到1个号码并返回相同的号码乘以100。