簡體   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