【问题标题】:Javascript, weird floating point number endless decimal?Javascript,奇怪的浮点数无穷小数?
【发布时间】:2011-09-07 00:04:54
【问题描述】:

我需要浮点数方面的帮助...拜托!

事情是这样的,我有如下代码:

<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>

您几乎可以猜到我的问题是什么:当我将两个浮点数相乘、相除或相减时,我会得到一个无限小数。

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

我不在乎这是如何完成的,但它必须是 Javascript。抱歉,如果之前已经回答过,但我真的需要尽快回答!谢谢!

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

【问题讨论】:

  • 可能不想通过说您懒得阅读其他可能回答您的问题来开始您的问题。
  • 您未能计划好并不构成我的紧急情况。阅读该死的答案。
  • 我会让你知道@Chris,我得到了这个代码。我必须处理它。感谢您的支持。
  • 这不是巨魔。这个问题已经被问过了,根据FAQ,这个问题甚至不应该在这里。
  • user-Unknown:你考虑过人们可能会分享他的感受吗?刚接触网站时,也许您应该更加努力地遵守网站的规则/态度。这个网站的精神不是“这是我的作业!完成它!现在!!!”他只是想指出这一点。 (阅读此文的任何人请注意:原始帖子在编辑之前的语气与现在大不相同。它最初的内容类似于“我不能因为阅读任何其他帖子而感到生气,所以为我做这个")

标签: javascript floating-point


【解决方案1】:

使用.toFixed():

var num = 45.34343434343;

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

【讨论】:

  • 有人帮忙!非常感谢! =D
【解决方案2】:

在 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。

【讨论】:

  • 又一个乐于助人的人!谢谢! :D 很高兴看到你们不像@Chris。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

    “Tie-Breaking”有不同的四舍五入规则,您需要知道您需要的是什么,因为它们用于不同的场景。 看here。

    【讨论】:

    • 谢谢你,Max,有一些额外的声誉,因为你是一个乐于助人的人。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多