-5

我遇到了这个奇怪的异常,创建了一个简单的 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 />

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

4

1 回答 1

1

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

toFixed(…)尽管您可以使用函数对它们进行四舍五入,但要修复数字以使其没有不稳定的小数。比如这样:

(parseFloat('1.445') * parseFloat('2')).toFixed(3);
于 2013-08-20T13:18:38.040 回答