我们在Mongoose模式中有以下代码尝试将money转换为整数以保存在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
我们如何解决这个问题?
答案 0 :(得分:3)
为了避免这些精确问题" money"变量,我总是使用"美分"作为单位。
不要存储15.24美元,在您的代码中存储1524美分。
然后使用整数执行所有操作。
然后使用美分=>美元转换仅用于显示,通过添加"。"最后两个字符前的分隔符。
答案 1 :(得分:0)
考虑使用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"
答案 2 :(得分:0)
这是否满足您的需求?
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.