繁体   English   中英

如何舍入浮点数,使小数点后只有两个尾随数字?

[英]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

我有一个更简单的答案适用于所有重要数字,而不仅仅是四个。 JavaScript提供了一个内置的 Number.toPrecision()函数,该函数返回一个表示有效数字的字符串。

var value = 137.57667565656;
var strVal = value.toPrecision(4);
>> 137.6

关于此职位的重要数字有很多误解。 请参阅Wikipedia以刷新您的记忆。 有关原始方法为何不正确的信息,请参见@RobG的答案。

添加两个零是因为在执行Math.round之前,您需要执行以下操作:

如果number的小数部分为0.5或更大,则参数将舍入为下一个更高的整数。 如果number的小数部分小于.5,则将参数舍入为下一个较小的整数。

(从这里拍摄)

您需要删除Math.round

(value*100)/100).toFixed(4).toString();

在JSFiddle上查看: http : //jsfiddle.net/0fe5mm95/

编辑显然我误解了这个问题。 当我尝试回答时(至少在标题中)是有效数字。

这个答案与Wikipedia的有效数字定义一致 它通过三个步骤解决了任意数量有效数字的一般问题:

  1. 用log10计算位数(如果-1<x<1 ,则为负,例如12345为5,或者0.01为-2)
  2. 将数字四舍五入到正确的位置(例如,如果x = 12345具有三个有效数字,则将四舍五入到00)
  3. 在右侧附加所需的零个数

就这样。 除零(无有效数字)外。 (当我要求输入三个有效数字时,我选择了“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM