2013-03-03 81 views
2

我公司擁有一批Java的舍入到兩位小數

double num = 1.234567; 

,我想只保留兩位小數

num = (int)((num * 100) + 0.5)/100.0; 

,但我得到的實際數量爲1.230000000001。我怎樣才能擺脫0000000001部分?

+0

你確定把它轉換成int得到1.2300 ... 1?我得到的答案爲1.23 ..但是,如果我不施放它,我得到1.239567 – user1428716 2013-03-03 03:14:28

+0

是的,我得到了一堆零,並不能解決問題 – OneZero 2013-03-03 03:17:15

+0

可能會在操作系統有所不同 - 我的是64位MAC-OS ..反正什麼是數值的範圍? – user1428716 2013-03-03 03:32:20

回答

2

嘗試DecimalFormat

DecimalFormat twoDp= new DecimalFormat("#.##"); 
Double.valueOf(twoDp.format(num)); 
+0

有沒有什麼辦法沒有這個格式的對象? – OneZero 2013-03-03 03:19:55

+0

試試這個:MathContext mc = new MathContext(3); // Precision \t BigDecimal b = new BigDecimal(num,mc); \t System.out.println(b.doubleValue()); – user1428716 2013-03-03 03:31:34

+0

@ user1428716將值轉換回浮點的答案可能是正確的。 FP沒有小數位。 – EJP 2013-03-03 09:05:56

0

試試這個..這應該解決它

 Double num = //value 
    num = //arithmetic 


    String temp =num.toString().split("\\.")[0]; 
     int precision=temp.length(); 
     BigDecimal b =new BigDecimal(num,new MathContext(precision+2)); 
    System.out.println(b.doubleValue()); 
2

你不能,除非你切換到十進制基數。雙數和浮點數沒有小數位,它們有二進制位,所以除了數值表示形式一致的情況下,不能將它們舍入或截斷爲特定的小數位數,即2的負冪。

因此,如果要顯示結果,則必須使用DecimalFormat,如果要繼續使用計算結果,則必須使用BigDecimal

任何通過將值重新轉換爲浮點結束的解決方案都不正確。

1
String result = String.format("%.2f", num);