循环遍历对象来执行最接近高整数的数学运算吗?
我希望循环遍历一个对象,获取一组值,然后计算出该值与下一个整数之间的差值。
例如,假设我有这个对象:
const data = [
{
"uid": "1121212",
"amount": {
"money": 11.2
},
"sourceAmount": {
"money": 2.2
}
},
{
"uid": "343343443",
"amount": {
"money": 222.30
},
"sourceAmount": {
"money": 444
}
},
{
"uid": "44",
"amount": {
"money": 54.21
},
"sourceAmount": {
"money": 32
}
}
]
如果可能,我希望循环遍历它并从
amount.money
键中获取值,然后计算出该数字与下一个整数之间的差值。因此在上面的例子中,可以获取值
11.22
&
222.30
&
54.21
并计算出与
12
223
和
55
之间的差值,因为这些是下一个值。因此差值将如下所示:
78
&
70
和
79
。这些值(我在想)可以推入数组吗?
我一直在研究
map()
功能,但很难形成满足我需求的功能?我有一些类似的东西:
const difference = [];
for (let i = 0, l = data.length; i < l; i++) {
var money = data.amount.money[i];
let roundedNumber = Math.ceil(money);
let d = function (money, roundedNumber) { return Math.abs(roundedNumber - money); }
difference.push(d)
}
我认为这是一次糟糕的尝试,任何有关最佳实践的帮助都会很棒。
差异数组应如下所示:
const difference = ['78', '70', '79'];
或
const difference = ['0.78', '0.70', '0.79'];
我认为以下
.map()
和
Math.ceil()
组合可以起作用:
const data = [ { "uid": "1121212", "amount": { "money": 11.2 }, "sourceAmount": { "money": 2.2 } }, { "uid": "343343443", "amount": { "money": 222.30 }, "sourceAmount": { "money": 444 } }, { "uid": "44", "amount": { "money": 54.21 }, "sourceAmount": { "money": 32 } } ]
const result = data.map(e => (Math.ceil(e.amount.money) - e.amount.money).toFixed(2));
console.log(result);
由于
12 - 11.2
,第一个值为
0.80
。
请查找使用
Number.parseFloat()
解析的数字:
const data = [ { "uid": "1121212", "amount": { "money": 11.2 }, "sourceAmount": { "money": 2.2 } }, { "uid": "343343443", "amount": { "money": 222.30 }, "sourceAmount": { "money": 444 } }, { "uid": "44", "amount": { "money": 54.21 }, "sourceAmount": { "money": 32 } } ]
const result = data.map(e => Number.parseFloat((Math.ceil(e.amount.money) - e.amount.money).toFixed(2)));
console.log(result);
希望这对您有所帮助!
如果您希望
result
中包含整数,则以下内容可能会有所帮助。在
float_val*100
上应用
round()
比执行
float_val.toFixed(2)*100
更好,因为第二种方法会因舍入误差而导致结果不准确。
const data = [ { "uid": "1121212", "amount": { "money": 11 }, "sourceAmount": { "money": 2.2 } }, { "uid": "343343443", "amount": { "money": 222.30 }, "sourceAmount": { "money": 444 } }, { "uid": "44", "amount": { "money": 54.216 }, "sourceAmount": { "money": 32 } } ]
const result = data.map(e =>Math.round(100*(1-e.amount.money%1))%100);
console.log(result);
编辑
:
根据您的评论,我在公式中又添加了一个
%100
。我还更改了一些示例值以演示舍入行为。第一个值现在返回 0,最后一个(更改后的)值
54.216
将导致余数 78.4,然后将其舍入为 78。