首页 > 解决方案 > 在 JavaScript 中将 let 值相加

问题描述

我正在使用 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) 打印到控制台。我对此感到困惑。

为第一次缺乏细节而道歉。

谢谢

标签: javascript

解决方案


你得到这个结果是因为basicRate,higherRateadditionalRate字符串

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返回一个字符串。如果您想用数值实际执行进一步的计算,请不要使用它。

最后,不要使用浮点值来执行货币计算。由于舍入误差和精度损失,结果将不正确。将所有数字表示为整数。


推荐阅读