使用JavaScript将数字格式化为仅保留两位小数

647

我有一行代码可以将数字四舍五入到两位小数。但是,我得到的数字像这样:10.8、2.4等。这不是我认为的两位小数,请问如何改进以下代码?

Math.round(price*Math.pow(10,2))/Math.pow(10,2);

我希望得到像10.80、2.40这样的数字。使用jQuery也可以。


1
你的代码正是我所需要的(用于将浮点数精度减少到7位小数以生成较小的JSON文件)。为了提高速度,跳过Math.pow,使用以下代码:val = Math.round(val * 10000000) / 10000000); - Pawel
由于当前接受的答案(https://dev59.com/anI-5IYBdhLWcg3wsKl4#1726662)由于数字固有的严重不精确性(0.565、0.575、1.005)在广泛数值范围内给出了一个错误的结果,我可以建议再次查看这个答案(https://dev59.com/anI-5IYBdhLWcg3wsKl4#21323330),它可以得到正确的结果。 - T.J. Crowder
也许你想为JavaScript包含一个sprintf库。https://dev59.com/YXRB5IYBdhLWcg3weXOX - Thilo
3
在使用十进制位移和四舍五入方法正确地进行舍入后,您可以使用number.toFixed(x)方法将其转换为具有所需零数量的字符串。例如,使用跨浏览器方法将1.34舍入为1.3,然后添加1个零并使用1.3.toFixed(2)转换为字符串(以获取"1.30")。 - Edward
到了2020年,JavaScript中没有一种简单的本地方法可以轻松地将数字四舍五入。哇。 - Sliq
const formattedNumber = Math.round(number * 100) / 100; 将数字乘以100并四舍五入,然后再除以100,得到格式化后的数字。 - Hamza Dahmoun
32个回答

-3

我发现了一个非常简单的方法,解决了这个问题,并且可以被使用或者改编:

td[row].innerHTML = price.toPrecision(price.toFixed(decimals).length

-5

百分之百有效!!!试试看

<html>
     <head>
      <script>
      function replacePonto(){
        var input = document.getElementById('qtd');
        var ponto = input.value.split('.').length;
        var slash = input.value.split('-').length;
        if (ponto > 2)
                input.value=input.value.substr(0,(input.value.length)-1);

        if(slash > 2)
                input.value=input.value.substr(0,(input.value.length)-1);

        input.value=input.value.replace(/[^0-9.-]/,'');

        if (ponto ==2)
 input.value=input.value.substr(0,(input.value.indexOf('.')+3));

if(input.value == '.')
 input.value = "";
              }
      </script>
      </head>
      <body>
         <input type="text" id="qtd" maxlength="10" style="width:140px" onkeyup="return replacePonto()">
      </body>
    </html>


欢迎来到SO。请阅读此如何回答并遵循指南进行回答。 - thewaywewere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接