gpt4 book ai didi

javascript - 拆分账单 - JavaScript 练习

转载 作者:行者123 更新时间:2023-12-02 14:09:07 28 4
gpt4 key购买 nike

我目前正在学习 JS,并且正在尝试进行编码练习。到目前为止,我已经成功地使用离线和在线部分代码的大量资源拼凑了以下代码。我已经非常接近了 - 只是结果中的数字无法正确。

一些背景:在函数中输入一个对象,输出一个函数,显示每个人应该根据对象中的(总账单/人)支付或接收多少金额。每个属性(property)==人。结果必须四舍五入到小数点后两位。

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] 导致了问题,但我不完全明白原因。

最佳答案

您无法获得尚未完全相加的总和的平均值,因此您的 avg 变量并不是您想象的那样。

function splitTheBill(group) {
var result = {};
var sum = 0;

for (var key in group) {
sum += group[key];
}

var avg = sum / (Object.keys(group).length);

for (var person in group) {
result[person] = Math.floor(-100 * (group[person] - avg))/100;
}
return result;
}

var r = splitTheBill({A: 7, B: 3, C: 2});

console.log(r);

使用两个循环可能会更有效,但至少它很冗长。
另请注意,数字不能是 1.00 等。您需要使用 .toFixed(2)

创建字符串。

关于javascript - 拆分账单 - JavaScript 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39804067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com