我正在使用JavaScript编写税务计算器应用程序,并且在添加let值时遇到问题。
当试图在控制台中添加3个不同的税值时,我总是得到的答案是第一个值。
let basicRate,
higherRate,
additionalRate;
function calculateTaxDue(grossSalary) {
if (grossSalary > 150000) {
basicRate = parseFloat((46351 - 11000) * 0.2).toFixed(2);
higherRate = parseFloat((150000 - 46351) * 0.4).toFixed(2);
additionalRate = parseFloat((grossSalary - 150000) *
0.45).toFixed(2)
taxDue = parseFloat((basicRate + higherRate +
additionalRate)).toFixed(2);
}
}
calculateTaxDue(150001)
console.log(parseFloat(basicRate).toFixed(2));
console.log(parseFloat(higherRate).toFixed(2));
console.log(parseFloat(additionalRate).toFixed(2));
console.log(parseFloat(basicRate + higherRate +
additionalRate).toFixed(2));
只需将第一个值(basicRate)打印到控制台即可。我很困惑。
第一次缺乏细节道歉。
由于
答案 0 :(得分:2)
您收到此结果是因为basicRate
,higherRate
和additionalRate
是字符串。
basicRate + higherRate +
additionalRate
生成字符串"7070.2041459.600.45"
和parseFloat("7070.2041459.600.45").toFixed(2)
返回7070.20
。
只有在您想要显示数字时才使用.toFixed
:
let basicRate,
higherRate,
additionalRate;
function calculateTaxDue(grossSalary) {
if (grossSalary > 150000) {
basicRate = (46351 - 11000) * 0.2;
higherRate = (150000 - 46351) * 0.4;
additionalRate = (grossSalary - 150000) *
0.45;
taxDue = basicRate + higherRate +
additionalRate;
}
}
calculateTaxDue(150001)
console.log(basicRate.toFixed(2));
console.log(higherRate.toFixed(2));
console.log(additionalRate.toFixed(2));
console.log((basicRate + higherRate +
additionalRate).toFixed(2));

最重要的是:阅读您正在使用的功能的文档。
parseFloat
期望一个字符串作为输入并返回一个数字。像parseFloat((46351 - 11000) * 0.2)
中那样传递数字是没有意义的。.toFixed
返回一个字符串。如果您想使用数值实际执行进一步的计算,请不要使用它。最后,don't use floating point values to perform monetary computations。由于舍入误差和精度损失,结果将不正确。将所有数字表示为整数。