1. 程式人生 > >關於java格式化資料,保留兩位小數不精準的問題

關於java格式化資料,保留兩位小數不精準的問題

首先,網上有傳的幾種格式化的方法,如下

java保留兩位小數問題:

方式一:

四捨五入  
double   f   =   111231.5585;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  
保留兩位小數
  
---------------------------------------------------------------  

方式二:

java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化的數字);

例:new java.text.DecimalFormat("#.00").format(3.1415926)

#.00 表示兩位小數 #.0000四位小數 以此類推...

方式三:

double d = 3.1415926;

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

%.2f %. 表示 小數點前任意位數   2 表示兩位小數 格式後的結果為f 表示浮點型

方式四:

NumberFormat ddf1=NumberFormat.getNumberInstance() ;

void setMaximumFractionDigits(int digits) 
digits 顯示的數字位數 
為格式化物件設定小數點後的顯示的最多位,顯示的最後位是舍入的

這裡指出,這樣格式化資料的話,你會發現,小數點後面的精確度影響很大,首先你要理解format的原理,原理大概是這個公式一樣

floatnum=(float)(Math.round(totalPrice*100)/100);//如果要求精確4位就*10000然後/10000

這樣計算的話,自己可以筆算試試,出來的結果跟你想要的結果誤差是比較大的

解決處理的方法:

把所有的Float資料,換成Double