![](/img/trans.png)
[英]Delete digits after two decimal point not round number in javascript?
[英]How can I round a float such that there are only two trailing digits after the decimal point?
我有一个浮点数,例如137.57667565656,但我想四舍五入,使得小数点后只有两个尾随数字,例如新的浮点数将是137.58。
到目前为止,我已经尝试过了:
(Math.round((value*100)/100)).toFixed(2).toString();
但不幸的是,它使我的价值接近137.00。 它将小数位添加为零,为什么呢?
如何实现以上目标?
您期望什么?
(value*100)/100
简单地返回value的原始值 ,所以
Math.round((value*100)/100))
等同于:
Math.round(value)
然后,您将拥有:
Math.round(value).toFixed(2).toString();
因此,将值四舍五入为整数, toFixed将添加两个小数位并返回一个字符串,因此toString部分是多余的。 如果希望将值四舍五入到小数点后四位,则:
value.toFixed(4)
将做的工作:
var x = 137.57667565656;
console.log(x.toFixed(4)); // 137.5767
如果您想将其四舍五入而将其表示为4,则:
Number(x.toFixed(2)).toFixed(4) // 137.5800
添加两个零是因为在执行Math.round
之前,您需要执行以下操作:
如果number的小数部分为0.5或更大,则参数将舍入为下一个更高的整数。 如果number的小数部分小于.5,则将参数舍入为下一个较小的整数。
您需要删除Math.round
:
(value*100)/100).toFixed(4).toString();
在JSFiddle上查看: http : //jsfiddle.net/0fe5mm95/
编辑显然我误解了这个问题。 当我尝试回答时(至少在标题中)是有效数字。
这个答案与Wikipedia的有效数字定义一致 。 它通过三个步骤解决了任意数量有效数字的一般问题:
-1<x<1
,则为负,例如12345为5,或者0.01为-2) 就这样。 除零(无有效数字)外。 (当我要求输入三个有效数字时,我选择了“ 0.00”,但是0或0.0也可以)
function toStringWithSignificantDigits( x, len ){
if(x==0) return x.toFixed(len-1); // makes little sense for 0
var numDigits = Math.ceil(Math.log10(Math.abs(x)));
var rounded = Math.round(x*Math.pow(10,len-numDigits))*Math.pow(10,numDigits-len);
return rounded.toFixed(Math.max(len-numDigits,0));
}
function testIt(x,len){
console.log( "format " + x + " to " + len + " significant digits: " + toStringWithSignificantDigits(x,len));
}
testIt(12.345,6); // 12.3450
testIt(12.345,5); // 12.345
testIt(12.345,4); // 12.35
testIt(12.345,3); // 12.3
testIt(12.345,2); // 12
testIt(12.345,1); // 10
testIt(0.012345,7); // 0.01234500
testIt(0.012345,6); // 0.0123450
testIt(0.012345,5); // 0.012345
testIt(0.012345,4); // 0.01235
testIt(0.012345,3); // 0.0123
testIt(0.012345,2); // 0.012
testIt(0.012345,1); // 0.01
testIt(0,3); // 0.00, zero is a special case, as it has no significant digit
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.