【发布时间】:2010-11-04 16:09:40
【问题描述】:
我不知道该怎么做?我正在添加逗号数字,结果当然总是一个逗号后数字太多的数字。有人吗?
【问题讨论】:
-
对于某些语言环境,逗号被替换为句点。
-
@Matt - 这是 jParseFloat 插件的一部分,它将在 1.5 中成为 jQuery 核心的一部分!
标签: javascript math rounding
我不知道该怎么做?我正在添加逗号数字,结果当然总是一个逗号后数字太多的数字。有人吗?
【问题讨论】:
标签: javascript math rounding
编辑 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 边界处舍入时增加)
【讨论】:
3.1415 在您的示例中变为 3.00。
更新:请记住,在 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.00056.000 / 100 = 0.56000 (0.56000).toFixed(2) -> 0.56这是代码:
(Math.round(number * 100)/100).toFixed(2);
【讨论】:
这对我有用:
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。我会把它添加到你的答案中。
以前的答案忘记再次将输出键入为数字。有几种方法可以做到这一点,具体取决于您的口味。
+my_float.toFixed(2)
Number(my_float.toFixed(2))
parseFloat(my_float.toFixed(2))
【讨论】:
这不是真正的 CPU 友好,但是:
Math.round(number*100)/100
按预期工作。
【讨论】:
虽然我们在这里有很多答案和很多有用的建议,但每个人仍然错过一些步骤。
所以这里是一个完整的解决方案,包装成小函数:
function roundToTwoDigitsAfterComma(floatNumber) {
return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}
如果您对它的工作原理感兴趣:
toFixed(2) 保留 2 位数字
逗号并抛出其他无用的部分parseFloat() 函数将其转换回浮点数
toFixed(2) 改为返回字符串注意:如果您因为使用货币价值而保留逗号后的最后 2 位数字,并且进行财务计算请记住它是 not a good idea,您会最好使用整数值。
【讨论】:
使用下面的代码。
alert(+(Math.round(number + "e+2") + "e-2"));
【讨论】:
我用这个:
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;
}
【讨论】:
上述所有建议似乎都不适用于所有数字(包括负数)
0.075 => 0.08
-0.075 => -0.08
0.005 => 0.01
-0.005 => -0.01
Math.sign(num) * (Math.round((Math.abs(num) + Number.EPSILON) * 1e2) / 1e2);
【讨论】: