逗号后将数字四舍五入为两位数


81

我不知道该怎么做?我要添加逗号数字,结果当然总是一个逗号后面的数字太多的数字。任何人?


1
在某些语言环境中,逗号用句点代替。
DOK 2010年

@Matt-这是jParseFloat插件的一部分,它将成为1.5版jQuery核心的一部分!
尼克·克拉弗

Answers:


105

编辑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(roudedString); // toFixed() returns a string (often suitable for printing already)

四舍五入为42.0054321到42.01

四舍五入为0.005至0.01

将四舍五入到-0.005到-0.01(因此,在0.5边界处四舍五入会增加绝对值)

jsFiddle示例


1
@Sten-逗号还是十进制?您的问题和示例不同意。
尼克·克雷弗

11
如果要实际舍入一个数字,例如将0.007舍入到两位小数位,则此示例不起作用。其结果是:Math.round(0.007)-> 0.000,然后是Fixed(2)-> 0.00。实际的舍入过程应为0.01。
Andrei 2013年

9
downvote:答案不正确,因为Math.round()将数字四舍五入,从而删除所有小数。然后,toFixed(2)所做的全部就是添加两个尾随零。只需number.toFixed(2)即可。
HammerNL 2014年

1
应该做些什么,因为这个答案是错误的,其他人在盲目使用接受的答案之前可能不会阅读评论。
Pedro Moreira 2015年

1
-1:3.1415成为3.00你的榜样。

103

更新:请记住,在最初于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);

我使用相同的方法。表现出色
Indiana Kernick

例如,当您已经在逗号(>(Math.round(123.12124 * 100)/ 100).toFixed(4); ===> 123.1200
阿伦多夫

1
您忘了更改舍入数学,像这样:Math.round(123.12124 * 10000)/ 10000).toFixed(4)。如果要舍入到小数点后第四位。
Andrei'7

错误:toFixed()舍入该数字,因此它不是截断。请参阅developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/…–
MikeB

未通过1.005
Len Joseph

54

这对我有用:

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似乎具有正确舍入的正确解决方案。
Joshua Pinter 2015年

1
哈!没关系。我只是测试它和toFixed()完美的作品:0.6666.toFixed(3) # => 0.667。我将其添加到您的答案中。
2015年

3
最短和最好。这应该是公认的答案。

12

先前的答案忘记再次将输出键入为数字。有多种方法可以执行此操作,具体取决于您的口味。

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))

1
根据我的说法,这是最好的答案。它很简单,简短,结果是NUMBER
Kar.ma,2017年

我喜欢“ +”符号,非常优雅
Jibeee

4

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

Math.round(number*100)/100

如预期般运作。


2

尽管我们在这里有很多答案,并且提供了许多有用的建议,但是每个答案仍然缺少一些步骤。
因此,这是包装成小函数的完整解决方案:

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

以防万一您对这是如何工作感兴趣的:

  1. 乘以100的倍数,然后取整以保持逗号后2位数的精度
  2. 再除以100并使用toFixed(2)逗号后保留两位数字,并丢弃其他无用的部分
  3. 通过使用parseFloat()函数作为 toFixed(2)返回字符串来将其转换回float

注意:如果由于使用货币值而在逗号后保留最后两位数字,并且进行财务计算时请记住,这不是一个好主意,而是最好使用整数值。


1

使用下面的代码。

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

2
这个答案与这个已有7年历史的问题的其他答案基本上具有相同的作用,但是以一种非常模糊的方式,利用了javascript的隐式类型转换。此代码的什么品质说服您将其发布在这里?
u354356007 '10

这个答案的质量是,它使我学到了一些我不了解的关于JS的新知识;-)
Deblaton Jean-Philippe 17/12/13

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.