我正在尝试让我的程序正常工作,但是出了点问题。我想做一个简单的税收计划,我计算总价格,包括X项目税额。我想在JavaScript中使用prompt命令输入值。这是我的代码:
let phonePrice;
let quantity;
let tax;
let total;
let total2;
phonePrice = prompt('Enter the phone price here...','');
quantity = prompt('Enter quantity here...','');
tax = phonePrice * 0.05;
total = phonePrice + tax;
total2 = quantity * total
alert('The Price on ' + quantity + ' phones with tax included is ' + total2 + ' dollars.');
一切正常,直到我想添加十进制数作为值。数量当然不能是十进制数,但是,例如,项目价格可以是119.95美元。当我在脚本中直接输入这个数字(没有提示)时一切都很好,但是当我声明提示并在浏览器中输入相同的值时,它会给我NaN作为不是数字的值。任何人都有任何解释,我该如何解决这个问题呢?
答案 0 :(得分:1)
尝试调试您的代码,您将看到该问题不在解析:)
你在phonePrice中有STRING(promt的结果是字符串,让它成为' 10.5')
然后你有(tax = phonePrice * 0.05;)结果将是float(autoconverted)= 0.525
然后你有(total = phonePrice + tax;)结果将是STRING =" 10.50.525" - 因为' +'运算符,如果有任何参数STRING - all将用作STRING
然后你最后得到了NaN' *' - 因为没有人知道这个数字" 10.50.525" :)和float * NaN = NaN
的结果尝试转换输入值。
TRUE

答案 1 :(得分:0)
您必须将prompt
(已解析为字符串)的输入转换为数字parseFloat
和parseInt
:
let phonePrice;
let quantity;
let tax;
let total;
let total2;
phonePrice = parseFloat(prompt('Enter the phone price here...',''));
quantity = parseInt(prompt('Enter quantity here...',''));
tax = phonePrice * 0.05;
total = phonePrice + tax;
total2 = quantity * total
alert('The Price on ' + quantity + ' phones with tax included is ' + total2 + ' dollars.');

那就是说,你应该用美分而不是美元计算你的钱,并使用整数而不是浮点数,以避免浮点精度的错误。