2014-02-12 65 views
0

目前我使用的DecimalFormat類四捨五入雙重價值四捨五入雙值在Java中

double d = 42.405; 
DecimalFormat f = new DecimalFormat("##.00"); 
System.out.println(f.format(d)); 

output: 42.41; 

我使用硒做瀏覽器的應用程序測試,所以基於我需要四捨五入值的瀏覽器。

例如:

IE四捨五入42.405到42.40和其他四捨五入至42.41。但是,如果數值是42.403,42.406,那麼我在所有瀏覽器中看到一致性。所以,現在我已經把一個條件,我的劇本,所以如果瀏覽器是IE則四捨五入以這樣的方式,我應該得到42.40和其他瀏覽器是應該發生的應該得到42.41。我怎樣才能做到這一點?

+0

的【如何把一個數字在Javañ小數]可能重複(http://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-在-JAVA) –

回答

3

您可以爲DecimalFormatter指定RoundingMode,但請根據您的需要選擇它(我剛剛給出了一個使用HALF_UP的示例)。

double d = 42.405; 
DecimalFormat f = new DecimalFormat("##.00"); 
f.setRoundingMode(RoundingMode.HALF_UP); 
System.out.println(f.format(d)); // Prints 42.41 

另外,您也可以使用BigDecimal(櫃面你知道爲什麼我們平時去BigDecimal而不是double)爲同一。

double d = 42.405; 
BigDecimal bd = new BigDecimal(d); 
bd = bd.setScale(2, RoundingMode.HALF_UP); 
System.out.println(bd.doubleValue()); // Prints 42.41 
+0

那麼爲什麼要使用巨大的'BigDecimal'的小號碼?爲什麼不使用正常的格式? –

+0

-1完全不必要的'BigDecimal'。你答案的第二部分看起來不錯。 – SebastianH

+0

@SebastianH - 你怎麼稱呼那不必要的?它可能對你沒有用處,或者甚至可能對你有用,但我相信它對未來的用戶來說很有用。我給OP上的選項和所有選項都使用了他們需要的選項。我尊重您的投票,但我不會從答案中刪除「BigDecimal」部分。 – SudoRahul

1
DecimalFormat f=new DecimalFormat("0.00"); 
String formate = f.format(value); 
double finalValue = (Double)f.parse(formate) ; 
System.out.println(finalValue); 
0

嘗試,這可能是有幫助的:

double d = 42.405; 
System.out.println(String.format("%2.2f", d)); 
0

你也能做到 「handly」 爲遵循

double d = 42.405; 
final double roundedValue = (Math.round(d * 100)/(double) 100); 

42.405情況下,你會得到42.41和在42.404情況下 - 42.4 所以後

System.out.println(String.format("%2.2f", roundedValue)); 

你會得到所需的輸出。 42.4142.40