java 小數(shù)點后保留兩位有效數(shù)字
今天偶爾用到了UI布局需要把BigDecimal格式顯示出來,顯示的格式是小數(shù)點后保留一位,比較可悲的是搜索的結(jié)果大同小異语卤,基本都是五種方式。目前在國內(nèi)好像出現(xiàn)了一種奇怪的現(xiàn)象,有一個人寫了播放比藻,其他人遇到類似的問題后,基本都是轉(zhuǎn)載或者直接拷貝發(fā)表成自己的文章倘屹。幾乎沒有任何的加工和嚴(yán)重银亲,更不能說出什么理由說出自己這么做,哦忘記了纽匙,可能有一條理由务蝠,那就是很多招聘jd上寫著,有博客者加分烛缔。很想問一下這樣簡單的轉(zhuǎn)載或者拷貝不加上自己的驗證或者思考能加分嗎馏段?如果我是面試官,我很可能會直接pass了践瓷,為什么院喜?太懶了,無論是手懶還是思維懶都會對自己的職業(yè)產(chǎn)生不利的影響当窗。
我自己的想法
你可能會說你自己的想法干我毛用够坐,的確沒什么用,但是自己后悔后想起的時候可能就有毛用了。很多大蝦元咙,大俠梯影,大神都說不要造輪子,更不要重復(fù)造輪子庶香,要使用已經(jīng)驗證的直接拿來就好用的甲棍。理論上沒錯,但是有一點錯了赶掖,那就是他們已經(jīng)理解了輪子的原理感猛,已經(jīng)會早輪子了,而不是像很多人只是會用那樣簡單奢赂。記住別人的經(jīng)驗一定不適合你陪白,別老是找相似點,那樣越發(fā)的覺得自己像大神膳灶,要找不同點咱士,這樣才會像自己,最終才是大神轧钓。
結(jié)束廢話進(jìn)入正題
引入搜索結(jié)果五種保留兩位小數(shù)的方法
以下是網(wǎng)絡(luò)常見的五種方法序厉,這里我貼上驗證的完整代碼以便于其他同學(xué)驗證
public class TestJava {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("100.000");
BigDecimal bigDecimal2 = new BigDecimal("0.0810");
method1(bigDecimal);
method1(bigDecimal2);
System.out.println("----------------------------------------");
method2(bigDecimal);
method2(bigDecimal2);
System.out.println("----------------------------------------");
method3(bigDecimal);
method3(bigDecimal2);
System.out.println("----------------------------------------");
method4(bigDecimal);
method4(bigDecimal2);
System.out.println("----------------------------------------");
method5(bigDecimal);
method5(bigDecimal2);
}
/**
* 方法一
* @param f
*/
public static void method1(BigDecimal f){
//BigDecimal bg = new BigDecimal(f);
double f1 = f.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("mehtod1 result is:"+f1);
}
/**
* 方法二
* @param f
*/
public static void method2(BigDecimal f){
DecimalFormat df = new DecimalFormat("#.00");
System.out.println("mehtod2 result is:"+df.format(f));
}
/**
* 方法三
* @param f
*/
public static void method3(BigDecimal f){
System.out.println("mehtod3 result is:"+String.format("%.2f", f));
}
/**
* 方法四
* @param f
*/
public static void method4(BigDecimal f){
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
System.out.println("mehtod4 result is:"+nf.format(f));
}
/**
* 方法五
* @param f
*/
public static void method5(BigDecimal f){
float floatValue= f.floatValue();
float num=(float)(Math.round(floatValue*100)/100);
System.out.println("mehtod5 result is:"+num);
}
}
驗證結(jié)果
mehtod1 result is:100.0
mehtod1 result is:0.08
----------------------------------------
mehtod2 result is:100.00
mehtod2 result is:.08
----------------------------------------
mehtod3 result is:100.00
mehtod3 result is:0.08
----------------------------------------
mehtod4 result is:100
mehtod4 result is:0.08
----------------------------------------
mehtod5 result is:100.0
mehtod5 result is:0.0
看出什么了嗎?僅僅把代碼貼到IDE里面驗證一下就可以得出上面的結(jié)論毕箍。這里是有BigDecimal來兼容所有數(shù)字類型弛房。
得出的結(jié)論
目前只有第三種辦法字符串處理是比較好用的,但是效率卻不是最高的而柑,有沒有更好的答案呢文捶?一定有的,歡迎來砸牺堰,如果我自己找到也補充上拄轻。