Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript parseFloat错误:1.445+;2 = 3.4450000000000003_Javascript_Html_Parsefloat - Fatal编程技术网

JavaScript parseFloat错误:1.445+;2 = 3.4450000000000003

JavaScript parseFloat错误:1.445+;2 = 3.4450000000000003,javascript,html,parsefloat,Javascript,Html,Parsefloat,我在创建一个简单的javaScript演示时遇到了这种奇怪的异常情况,我将用它来教我11岁的孩子基本的编码。我认为,在使用javaScript解析float javaScript函数之前,可能没有对输入字符串进行清理。该程序适用于其他浮点小数,如2.5+3=5.5。但在这一实例中,1.445+2=3.4450000000003。纯粹出于好奇,我想知道这里发生了什么。因此,在没有任何进一步延迟的情况下,下面是JavaScript代码: var funct = null; function clar

我在创建一个简单的javaScript演示时遇到了这种奇怪的异常情况,我将用它来教我11岁的孩子基本的编码。我认为,在使用javaScript解析float javaScript函数之前,可能没有对输入字符串进行清理。该程序适用于其他浮点小数,如2.5+3=5.5。但在这一实例中,1.445+2=3.4450000000003。纯粹出于好奇,我想知道这里发生了什么。因此,在没有任何进一步延迟的情况下,下面是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

要修正数字,使其没有不稳定的小数,尽管您可以使用
toFixed(…)
函数对其进行四舍五入。例如:

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

可能与OP的注释重复:你问的基本问题并不太糟糕(这个问题很容易理解,但如果你不知道“浮点”这个短语,就很难搜索);然而,您的问题可能会得到如此多的反对票,因为您的示例代码太长了。您只需使用几行代码即可重新创建问题。此外,如果您要教授编程,则应鼓励使用有意义的变量名。值得注意的是,
toFixed
返回字符串。