【问题标题】:javascript calculation outputs weird result [duplicate]javascript计算输出奇怪的结果[重复]
【发布时间】:2014-10-29 16:22:57
【问题描述】:

我是一个完全的 n00b,所以请保持温和,我可能不会总是使用正确的术语...... 我有一个 javascript,它根据几个下拉菜单计算价格。

var cakePrice = getItemno()*getResolutionPrice()*getFrameratePrice() + candlesPrice() + insciptionPrice() + delValue;

前 5 个值来自脚本,主要由数组定义。最后一个值 (delValue) 直接来自表单并由此读出:

var e = document.getElementById("filling2");
var delValue = e.options[e.selectedIndex].value;

虽然在减去值时计算是正确的,但在添加 delValue 时完全错误。

谁能指点一下这里有什么问题?

【问题讨论】:

  • 您看到的行为(+ 运算符)的真正解释可以在这里找到:es5.github.io/#x11.6.1 - 注意 #7。还要注意它下面的- 运算符的行为

标签: javascript


【解决方案1】:

基于减法有效而加法无效的事实,我只能假设delValue 实际上是一个字符串。当字符串与+ 运算符一起使用时,此运算符将成为连接运算符而不是加法运算符。 1 + "1" 等于 "11",而不是 2。

要解决此问题,请使用 Unary Plus (+) 将您的 delValue 值转换为数字:

var cakePrice = ... insciptionPrice() + +delValue;

【讨论】:

  • 或者使用parseInt(delValue)(假设你实际上是在期待一个int值)。
  • @CharlieKilian parseInt 通常不是一个好主意(尤其是没有基数参数),因为它会去除尾随的非数字,允许用户输入数字然后输入任何字符(假设它来自用户输入),但计算仍然神奇地工作。即使期望一个整数,为什么不始终使用+(或Number())并获得一致的结果?
  • 我完全忘记了基数。我更懂!假设您正在寻找十进制数字,更正将是parseInt(delValue, 10)。至于另一个,我只是不认为数字前面多余的+ 读起来很好。新程序员很难看到它并理解它为什么会解析。但这是个人喜好问题。
【解决方案2】:

添加值时,您将字符串添加到整数,

整数被提升为字符串并且两个字符串被连接起来。

- 没有为字符串定义,那么你的字符串被解析为一个整数,你的减法就如你所愿地完成了。

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 2011-12-24
    • 2012-01-23
    • 2014-02-23
    • 2017-10-28
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多