gpt4 book ai didi

javascript - .toFixed() 会导致计算错误吗?

转载 作者:行者123 更新时间:2023-11-30 06:18:48 24 4
gpt4 key购买 nike

我正在创建一个简单的计算器来显示进行找零所需的最少硬币数量。用户输入零钱,函数输出所需的 25 美分、10 美分、5 美分和便士的数量。除非百位数字(便士数字)是 3 或 8,否则该代码似乎可以完美运行。在这种情况下,它输出的硬币比需要的少一分钱。这种不正确的输出是由于在这种情况下使用 Math.ceil 或 toFixed 引起的吗?可以用什么代替?

我在解决显示非整数硬币的窗口时遇到问题,这就是我开始使用 Math.ceil() 和 toFixed() 的原因。

function changeCalc() {
let a = document.getElementById("changeTotal").value;
let b = (a % 0.25).toFixed(2);
let quartersNum = Math.ceil((a - b) / 0.25);
if (b > 0) {
var c = (b % 0.1).toFixed(2);
var dimesNum = Math.ceil((b - c) / 0.1);
if (c > 0) {
var d = (c % 0.05).toFixed(2);
var nicklesNum = Math.ceil((c - d) / 0.05);
if (d > 0) {
var e = (d % 0.01).toFixed(2);
var penniesNum = Math.ceil((d - e) / 0.01);
document.getElementById("changeWindow").innerHTML =
`${quartersNum} quarters, ${dimesNum} dimes, ${nicklesNum} nickles,
${penniesNum} pennies`;
} else {
document.getElementById("changeWindow").innerHTML =
`${quartersNum} quarters, ${dimesNum} dimes, ${nicklesNum}
nickles`;
}
} else {
document.getElementById("changeWindow").innerHTML =
`${quartersNum} quarters, ${dimesNum} dimes`;
}
} else {
document.getElementById("changeWindow").innerHTML =
`${quartersNum} quarters`;
}
}

例如,当我输入 .18 作为更改值时,我希望输出为 0 25 美分、1 Angular 钱、1 镍币和 3 便士。相反,输出为 0 个 25 美分、1 个 Angular 钱、1 个镍币和 2 个便士。

最佳答案

这不是 toFixed()ceil() 的问题,更准确地说是 Floating-Point Imprecision问题,尤其是 javascript .

有很多方法可以解决它,但是对于您的问题,通常可以使用不必处理 float 的解决方案来解决,例如将初始数字乘以 100 得到 18,那么您就可以完全避免这个问题。

function changeCalc(inputString) {
let a = parseInt(inputString * 100);
let b = a % 25;
let quartersNum = Math.floor(a / 25);
if (b > 0) {
var c = b % 10;
var dimesNum = Math.floor(b / 10);
if (c > 0) {
var d = c % 5;
var nicklesNum = Math.floor(c / 5);
if (d > 0) {
var penniesNum = d;
console.log(
`${quartersNum} quarters, ${dimesNum} dimes, ${nicklesNum} nickles,
${penniesNum} pennies`);
} else {
console.log(
`${quartersNum} quarters, ${dimesNum} dimes, ${nicklesNum}
nickles`);
}
} else {
console.log(
`${quartersNum} quarters, ${dimesNum} dimes`);
}
} else {
console.log(
`${quartersNum} quarters`);
}
}

console.log("$0.18 is:");
changeCalc("0.18");

console.log("$0.24 is:");
changeCalc("0.24");

console.log("$0.33 is:");
changeCalc("0.33");

关于javascript - .toFixed() 会导致计算错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611335/

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