Javascript,奇怪的浮点数无尽小数?

时间:2011-09-07 00:04:54

标签: javascript floating-point

我需要一些关于浮点数的帮助......拜托!

这就是问题,我的代码如下:

<script>

    function add()
    {
        document.getElementById("answer").value = parseFloat(document.getElementById("num1").value) + parseFloat(document.getElementById("num2").value);
    }

    function subtract()
    {
        document.getElementById("answer").value = parseFloat(document.getElementById("num1").value) - parseFloat(document.getElementById("num2").value);
    }

    function multiply()
    {
        document.getElementById("answer").value = parseFloat(document.getElementById("num1").value) * parseFloat(document.getElementById("num2").value);
    }

    function divide()
    {
        document.getElementById("answer").value = parseFloat(document.getElementById("num1").value) / parseFloat(document.getElementById("num2").value);
    }

</script>

对不起它有点长!然后html非常简单:

<h1>Calculator</h1>

<h3>Enter a value in each box below, then click an operation</h3>

<form id="calculatorForm">
    <input id="num1" value="0" type="text">
    <input id="num2" value="0" type="text">
    <br>
    <input value="+" onclick="add();" type="button">
    <input value="-" onclick="subtract();" type="button">
    <input value="*" onclick="multiply();" type="button">
    <input value="/" onclick="divide();" type="button">
    <br>
    <input id="answer" value="0" type="text">
</form>

你几乎可以猜到我的问题是什么:当我乘以,除或减两个浮点数时,我最终得到无限小数。

我需要一个快速的解决方案,将这些数字四舍五入到两个小数点,我需要它稍后工作,因为我之后需要实施华氏温度到Celsisus的操作。

我不在乎这是怎么做的,但必须是Javascript。对不起,如果之前已经回答过,但我很快就需要回答!谢谢!

编辑:非常感谢那些回答我问题的乐于助人的人。谢谢!

4 个答案:

答案 0 :(得分:4)

使用.toFixed()

var num = 45.34343434343;

num = num.toFixed(2); // "45.34"

答案 1 :(得分:3)

在这里看到有一个函数Number.toFixed(num)可以做到这一点。

W3Schools JS Numbers查看更多信息和其他选项。

出现这个问题是因为在Javascript中,每个Number都是64位浮点数,没有Integer这样的东西。

答案 2 :(得分:3)

在Javascript中使用.toFixed()功能。

document.getElementById("answer").value = (parseFloat(document.getElementById("num1").value) - parseFloat(document.getElementById("num2").value)).toFixed(2);

或者更容易看到的版本:

var x = 3.14159265358979323;
alert(x.toFixed(2));   // 3.14

关于它如何运作的非常好的描述on MDN

答案 3 :(得分:3)

.toFixed()很有用,但是在Javascript(和许多其他语言)中正确舍入数字需要更多工作。

“打破”有不同的舍入规则,你需要知道你需要什么,因为它们在不同的场景中使用。 看here