我目前正在学习JS,而且我正在尝试通过编码练习。到目前为止,我已经成功地将部分代码中的大量资源脱机并联机,将以下代码拼凑在一起。我非常接近 - 在我的结果中无法获得正确的数字。分割条例草案 - JavaScript练习
一些背景: 输入一个对象到函数中,输出一个函数,显示每个人应该根据对象中的(总账单/人)支付或接收多少钱。每个属性==人。结果必须舍入到小数点后两位。
function splitTheBill(group) {
var result = {};
var sum = 0;
for (var person in group) {
sum += group[person];
var avg = sum/(Object.keys(group).length);
result[person] = Math.floor(-100 * (group[person] - avg))/100;
}
return result;
}
splitTheBill({A: 7, B: 3, C: 2});
// console result comes out to be: { A: -4.67, B: 0.33, C: 2 }
// if avg of above object is 4, then answer should be: {A: -3.00, B: 1.00, C: 2.00}
练习本身对于这个问题应该不重要。问题更多的是为什么代码产生不正确的结果。我已经检查过sum和avg是否返回正确的值 - 他们会这样做。 for..in循环内的result[person]
可能会导致问题,我不完全明白为什么。
是的,我意识到我可以使用.toFixed(2),但是在挑战中,它需要一个数字类型。它不必显示结尾0。 但现在的另一个问题是,它不会通过测试,因为显然0 * -1 = -0,它想看到一个0. – aizkhaj
是的,在一些非常罕见的情况下,'-0'是不一样的'0',但你可以很容易地解决 – adeneo
https://jsfiddle.net/m9kqyus3/ – adeneo