【问题标题】:JavaScript parseFloat error: 1.445 + 2 = 3.4450000000000003JavaScript parseFloat 错误:1.445 + 2 = 3.4450000000000003
【发布时间】:2013-08-20 13:13:43
【问题描述】:

我在创建一个简单的 javaScript 演示时遇到了这个奇怪的异常情况,我将用它来教我 11 岁的孩子编码的基础知识。我认为在使用 javaScript parse float javaScript 函数之前,我可能没有对输入字符串进行清理。该程序适用于其他浮点小数,即。 2.5 + 3 = 5.5。然而在这个例子中,1.445 + 2 = 3.4450000000000003。纯粹出于好奇,我想知道这里发生了什么。所以事不宜迟,下面是 JavaScript 代码:

var funct = null;
function clarifyOperation(x)
{
    if(x=="add")
    {
        document.getElementById("operation").innerHTML=" + ";
        funct="add";
    }
    else if(x=="subtract")
    {
        document.getElementById("operation").innerHTML=" - ";
        funct="subtract";
    }
    else if(x=="multiply")
    {
        document.getElementById("operation").innerHTML=" × ";
        funct="multiply";
    }
    else if(x=="divide")
    {        
        document.getElementById("operation").innerHTML=" ÷ ";
        funct="divide";
    }
}

function solve()
{
    var x=document.getElementById("inputX").value;
    var y=document.getElementById("inputY").value;
    var z;
    if(funct=="add")
    {
        z=parseFloat(x)+parseFloat(y);
        document.getElementById("result").value=z;
    }
    else if(funct=="subtract")
    {
        z=parseFloat(x)-parseFloat(y);
        document.getElementById("result").value=z;
    }
    else if(funct=="multiply")
    {
        z=parseFloat(x)*parseFloat(y);
        document.getElementById("result").value=z;
    }
    else if(funct=="divide")
    {
        z=parseFloat(x)/parseFloat(y);
        document.getElementById("result").value=z;
    }
}

这里是 HTML 代码:

<input type="text" value="" id="inputX"/>
<span id="operation">&nbsp;</span>
<input id="inputY" type="text" value="" />
<span>&nbsp;&#61;&nbsp;</span>
<input type="text" value="" id="result" /><br />
<input type="radio" name="operation" value="add" onchange="clarifyOperation(this.value)" />
<span>&#43;</span><br />
<input type="radio" name="operation" value="subtract" onchange="clarifyOperation(this.value)" />
<span>&#45;</span><br />
<input type="radio" name="operation" value="multiply" onchange="clarifyOperation(this.value)" />
<span>&#215;</span><br />
<input type="radio" name="operation" value="divide" onchange="clarifyOperation(this.value)" />
<span>&#247;</span><br />
<input type="button" value="calculate" onclick="solve()" />
<hr />

提醒社区:保持您的评论有用。

【问题讨论】:

标签: javascript html parsefloat


【解决方案1】:

在这些 SO 答案中做了一些公平的解释,描述了计算机中十进制数字的问题,并考虑到了 Javascript。

虽然您可以使用toFixed(…) 函数将它们四舍五入,但要修复这些数字,使其不包含不可靠的小数。比如这样:

(parseFloat('1.445') * parseFloat('2')).toFixed(3);

【讨论】:

  • 值得注意的是toFixed返回一个字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多