【问题标题】:Concatenating instead of summing up (JavaScript)连接而不是求和 (JavaScript)
【发布时间】:2015-06-25 00:01:27
【问题描述】:

我是 JavaScript 新手,我在网上搜索了很多,但我无法解决我的问题。我知道“InnerHtml”可能是问题所在,并且已经尝试了一些解决方案,但似乎没有任何效果。

这是我的代码:

        function compra() {

        dinero = document.getElementById("precio").innerHTML;
        document.getElementById("tipoo").innerHTML;
        total = dinero+total; 
        document.getElementById("compra").innerHTML = total;

问题是使用按钮显示结果,它没有添加值,只是连接它们。

我已经尝试过“parseInt”但不起作用,或者我放错了位置。

谢谢。

编辑-----

感谢各位快速回复...当我使用 parseFloat 或 Int 时,我得到“NaN”。

这是我的更多代码...希望对您有所帮助。

总消费:$ Añadir a la Lista

【问题讨论】:

  • 看看节点“precio”和“tipoo”在 HTML 中的样子会很有帮助 - 请提供一些代码来演示内容
  • 使用更多优点:total = +dinero + +total; 或使用 Number(dinero) 进行语义化

标签: javascript function concatenation add innerhtml


【解决方案1】:

innerHTML 返回字符串。如果要将它们视为数字并添加它们,则必须将它们转换。

total = parseFloat(dinero) + parseFloat(total);

【讨论】:

  • 小心使用这个,OP。你想要parseInt,否则你会遇到著名的floating point rounding error。以parseFloat(0.2) + parseFloat(0.1) 为例,你会得到0.30000000000000004。观看我链接的视频以了解更多信息。
  • @JordanDoyle 如果他的输入中有小数,他会得到0 作为结果,这是更错误的。
  • @JordanDoyle 看起来像 OP 中的值可能有小数部分,所以 parseInt() 是个坏主意。
  • 是的,他似乎在处理价格问题。如果他使用parseFloat 然后从它的返回中调用toPrecision(2) 可能是最好的。
【解决方案2】:

Javascript 是一种弱类型语言。所以发生了一些“魔法”。当您使用 + 运算符时,如果两个值都是数字,它将添加两个值的总和。否则它将进行字符串连接。

使用“window.parseInt”是诀窍。 (或 window.parseFloat 如果您使用十进制数)。

改变:

    total = dinero+total; 

到:

    total = window.parseInt(dinero) + window.parseInt(total);

这会将数字作为“字符串”转换为实际数字。

【讨论】:

  • 不要为此使用 parseInt,Number 更可靠。另外,不需要前缀“窗口”。
  • @JordanDoyle:当然,我可以支持这种可靠性:IE8 中的alert(parseInt("013")),或任何浏览器中的alert(parseInt("13.25"))...
  • 正如我在评论中所说,如果您使用的是十进制数字,请使用 parseFloat。如果您知道该值将是整数,则通常使用 parseInt 而不是 parseFloat
  • 我认为您应该只使用 parseInt() 来转换非十进制基数或“脏整数”,如 55px...
  • 我不确定你所说的非十进制基数是什么意思,但是是的,我同意你应该使用带有脏整数的parseInt(),例如55px,或者带有脏浮点数的parseFloat()比如33.3%等……
【解决方案3】:

根据其他答案 (Barmar) 和 cmets (Jordan Doyle),最好的选择是使用 parseFloat,如果数量低于 1,则使用 toPrecion

为什么parseInt 在这种情况下不正确?

parseInt('77.3') + parseInt('77.3') = 144  //incorrect

所以我们使用parseFloat:

parseFloat(77.3) + parseFloat(77.3) = 144.6 // correct

但是我们有一个问题......如果我们尝试:

parseFloat(0.1) + parseFloat(0.2)

结果将是

 0.30000000000000004

所以我对这个问题的解决方案是:
如果数字低于1,我们使用toPrecision

total = parseFloat(0.1) + parseFloat(0.2)
if( total < 1){
total = total.toPrecion(2) // 0.3 Correct
}

问题的答案:

function compra() {
 dinero = document.getElementById("precio").innerHTML;
 document.getElementById("tipoo").innerHTML;
 total = parseFloat(dinero) + parseFloat(total)
 if( total < 1){
  total = total.toPrecion(2);
 }
 document.getElementById("compra").innerHTML = total;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2015-12-17
    • 2017-12-09
    • 2018-04-28
    • 2021-08-15
    相关资源
    最近更新 更多