我怎样才能对浮点数进行四舍五入,使小数点后只有两个尾随数字

How can I round a float such that there are only two trailing digits after the decimal point?

本文关键字:数字 两个 小数点 浮点数 四舍五入      更新时间:2023-09-26

我有一个像 137.57667565656 这样的浮点数,但我想将其四舍五入,以便小数点后只有两个尾随数字,例如新的浮点数将是 137.58。

到目前为止,我尝试过:

(Math.round((value*100)/100)).toFixed(2).toString();

但不幸的是,它将我的值四舍五入为 137.00。它将小数位添加为零,为什么?

我怎样才能实现上述目标?

你期待什么?

(value*100)/100

只需返回值的原始,因此

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

如果要将其四舍五入到 2 位,但将其显示为 4,则:

Number(x.toFixed(2)).toFixed(4)  // 137.5800

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

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

关于这篇文章的重要人物有很多误解。请参阅维基百科以刷新您的记忆。请参阅@RobG的答案,了解原始方法不正确的原因。

添加两个零是因为在你做所有事情之前Math.round

如果数字的小数部分为 .5 或更大,则参数为 舍入到下一个较高的整数。如果小数部分 数字小于 .5,参数四舍五入到下一个较低的 整数。

(摘自此处)

您需要的是删除Math.round

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

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

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

这个答案符合维基百科对有效数字的定义。它通过三个步骤解决了任意数量的有效数字的一般问题:

  1. 用 log10 计算出位数(如果-1<x<1为负数,例如 5 表示 12345,或 -2 表示 0.01)
  2. 在正确的位置舍入数字(例如,如果 x=12345 有三个有效数字,则将 45 舍入到 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