【问题标题】:Rounding numbers to 2 digits after comma逗号后将数字四舍五入为 2 位数字
【发布时间】:2010-11-04 16:09:40
【问题描述】:

我不知道该怎么做?我正在添加逗号数字,结果当然总是一个逗号后数字太多的数字。有人吗?

【问题讨论】:

  • 对于某些语言环境,逗号被替换为句点。
  • @Matt - 这是 jParseFloat 插件的一部分,它将在 1.5 中成为 jQuery 核心的一部分!

标签: javascript math rounding


【解决方案1】:

编辑 2

像这样使用Number对象的toFixed方法:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roundedString); // toFixed() returns a string (often suitable for printing already)

将 42.0054321 舍入为 42.01

将 0.005 舍入为 0.01

将 -0.005 舍入到 -0.01(因此绝对值会在 .5 边界处舍入时增加)

jsFiddle example

【讨论】:

  • @Sten - 逗号还是小数?你的问题和例子不同意。
  • 如果您想实际舍入一个数字,例如 0.007 到小数点后两位,则此示例不起作用。结果是:Math.round(0.007) -> 0.000 然后 toFixed(2) -> 0.00。实际的舍入过程应呈现 0.01。
  • downvote:答案不正确,因为 Math.round() 将数字四舍五入,从而删除了所有小数。然后 toFixed(2) 所做的就是添加两个尾随零。只需 number.toFixed(2) 即可。
  • 应该做点什么,因为这个答案是错误的,其他人在盲目使用接受的答案之前可能不会阅读 cmets。
  • −1: 3.1415 在您的示例中变为 3.00
【解决方案2】:

更新:请记住,在 2010 年最初编写答案时,波纹管函数 toFixed() 的工作方式略有不同。 toFixed() 现在似乎做了一些舍入,但不是以严格的数学方式。所以要小心。做你的测试......下面描述的方法可以很好地进行四舍五入,正如数学家所期望的那样。

  • toFixed() - 方法将数字转换为字符串,保留指定的小数位数。它实际上并不对数字进行四舍五入,而是截断数字。
  • Math.round(n) - 将数字四舍五入到最接近的整数。于是转身:

0.5 -> 1; 0.05 -> 0

所以如果你想四舍五入,比如数字 0.55555,只到小数点后第二位;您可以执行以下操作(这是一步一步的概念):

  • 0.55555 * 100 = 55.555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0.56000
  • (0.56000).toFixed(2) -> 0.56

这是代码:

(Math.round(number * 100)/100).toFixed(2);

【讨论】:

  • 我用同样的方法。效果很好
  • 当您在昏迷后已经有了带有所需数字的浮点数时,例如 > (Math.round(123.12124 * 100)/100).toFixed(4); ===> 123.1200
  • 您忘记更改舍入数学,如下所示:Math.round(123.12124 * 10000)/10000).toFixed(4)。这是如果你想四舍五入到小数点后第四位。
  • 错误:toFixed() 确实 将数字四舍五入,因此它不是截断。见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 1.005 未通过
【解决方案3】:

这对我有用:

var new_number = float.toFixed(2);

例子:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667

【讨论】:

  • 认为这个问题是它没有“四舍五入”数字,所以0.6666.toFixed(3)变成0.666而不是0.667。 @Andrei 似乎有正确舍入的正确解决方案。
  • 哈!没关系。我刚刚对其进行了测试,toFixed() 完美运行:0.6666.toFixed(3) # => 0.667。我会把它添加到你的答案中。
  • 最短和最好的。这应该是公认的答案。
【解决方案4】:

以前的答案忘记再次将输出键入为数字。有几种方法可以做到这一点,具体取决于您的口味。

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))

【讨论】:

  • 这是我认为的最佳答案。它很简单,很短,结果是一个数字
  • 我喜欢“+”符号,很优雅
【解决方案5】:

这不是真正的 CPU 友好,但是:

Math.round(number*100)/100

按预期工作。

【讨论】:

    【解决方案6】:

    虽然我们在这里有很多答案和很多有用的建议,但每个人仍然错过一些步骤。
    所以这里是一个完整的解决方案,包装成小函数:

    function roundToTwoDigitsAfterComma(floatNumber) {
        return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
    }
    

    如果您对它的工作原理感兴趣:

    1. 乘以 100,然后进行四舍五入以保持 2 位数的精度 逗号后
    2. 除以 100 后使用toFixed(2) 保留 2 位数字 逗号并抛出其他无用的部分
    3. 使用parseFloat() 函数将其转换回浮点数 toFixed(2) 改为返回字符串

    注意:如果您因为使用货币价值而保留逗号后的最后 2 位数字,并且进行财务计算请记住它是 not a good idea,您会最好使用整数值。

    【讨论】:

      【解决方案7】:

      使用下面的代码。

      alert(+(Math.round(number + "e+2")  + "e-2"));
      

      【讨论】:

      • 这个答案与这个 7 年前的问题的其他答案基本相同,但是以一种非常模糊的方式,利用了 javascript 的隐式类型转换。这段代码的哪些特质让您将其发布在此处?
      • 这个答案的质量在于它让我学到了一些我不知道的关于 JS 的新东西 ;-)
      【解决方案8】:

      我用这个:

      function round(value, precision) {
      
      	if(precision == 0)
      		return Math.round(value);  	
      
      	exp = 1;
      	for(i=0;i<precision;i++)
      		exp *= 10;
      
      	return Math.round(value*exp)/exp;
      }

      【讨论】:

        【解决方案9】:

        上述所有建议似乎都不适用于所有数字(包括负数)

        1. 0.075 => 0.08

        2. -0.075 => -0.08

        3. 0.005 => 0.01

        4. -0.005 => -0.01

          Math.sign(num) * (Math.round((Math.abs(num) + Number.EPSILON) * 1e2) / 1e2);

        【讨论】:

          猜你喜欢
          • 2016-08-14
          • 1970-01-01
          • 2020-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多