我创建一个简单的计算器显示最少数量的必要硬币,使变化量。用户输入的变化量,并且所述函数输出宿舍,硬币,尼克尔斯,和必要的便士的数目。该代码似乎完全发挥功能,除非百位数(便士位)是一个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`;
}
}
例如,当我输入0.18作为变化值,我期望输出是4分之0,1枚硬币,1个尼克尔斯和3个便士。相反,输出为0季度,1枚硬币,1个尼克尔斯,和2个便士。
这是不是真的有toFixed()
或ceil()
但更准确地说是Floating-Point Imprecision问题的一个问题,尤其是与javascript。
有解决它的方法很多,但是对于你的问题,它通常通过使用不必如处理浮点数的解决方案解决乘以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");
是的的确如此。
在你的情况:每次d = 0.03,E将是0.01,因为(0.03%0.01)将被计算为0.009999999999999998将由.toFixed评价T0 0.01(2)。
但是,对于您的问题,这可能是如果u改变解决
if (d > 0) {
var e = (d % 0.01).toFixed(2);
var penniesNum = Math.ceil((d - e) / 0.01);
至
if (d > 0) {
var penniesNum = Math.ceil((d) / 0.01);
我希望这有助于你以某种方式。