在JavaScript中添加let值

时间:2018-05-08 17:51:33

标签: javascript

我正在使用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)打印到控制台即可。我很困惑。

第一次缺乏细节道歉。

由于

1 个答案:

答案 0 :(得分:2)

您收到此结果是因为basicRatehigherRateadditionalRate字符串

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。由于舍入误差和精度损失,结果将不正确。将所有数字表示为整数。