省钱整数
我们在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。