我公司擁有一批Java的舍入到兩位小數
double num = 1.234567;
,我想只保留兩位小數
num = (int)((num * 100) + 0.5)/100.0;
,但我得到的實際數量爲1.230000000001。我怎樣才能擺脫0000000001部分?
我公司擁有一批Java的舍入到兩位小數
double num = 1.234567;
,我想只保留兩位小數
num = (int)((num * 100) + 0.5)/100.0;
,但我得到的實際數量爲1.230000000001。我怎樣才能擺脫0000000001部分?
DecimalFormat twoDp= new DecimalFormat("#.##");
Double.valueOf(twoDp.format(num));
有沒有什麼辦法沒有這個格式的對象? – OneZero 2013-03-03 03:19:55
試試這個: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
@ user1428716將值轉換回浮點的答案可能是正確的。 FP沒有小數位。 – EJP 2013-03-03 09:05:56
試試這個..這應該解決它
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的負冪。
因此,如果要顯示結果,則必須使用DecimalFormat
,如果要繼續使用計算結果,則必須使用BigDecimal
。
任何通過將值重新轉換爲浮點結束的解決方案都不正確。
String result = String.format("%.2f", num);
你確定把它轉換成int得到1.2300 ... 1?我得到的答案爲1.23 ..但是,如果我不施放它,我得到1.239567 – user1428716 2013-03-03 03:14:28
是的,我得到了一堆零,並不能解決問題 – OneZero 2013-03-03 03:17:15
可能會在操作系統有所不同 - 我的是64位MAC-OS ..反正什麼是數值的範圍? – user1428716 2013-03-03 03:32:20