java 小數(shù)點(diǎn)后保留兩位有效數(shù)字
今天偶爾用到了UI布局需要把BigDecimal格式顯示出來(lái),顯示的格式是小數(shù)點(diǎn)后保留一位,比較可悲的是搜索的結(jié)果大同小異,基本都是五種方式。目前在國(guó)內(nèi)好像出現(xiàn)了一種奇怪的現(xiàn)象,有一個(gè)人寫(xiě)了播放,其他人遇到類(lèi)似的問(wèn)題后,基本都是轉(zhuǎn)載或者直接拷貝發(fā)表成自己的文章。幾乎沒(méi)有任何的加工和嚴(yán)重,更不能說(shuō)出什么理由說(shuō)出自己這么做,哦忘記了,可能有一條理由,那就是很多招聘jd上寫(xiě)著,有博客者加分。很想問(wèn)一下這樣簡(jiǎn)單的轉(zhuǎn)載或者拷貝不加上自己的驗(yàn)證或者思考能加分嗎?如果我是面試官,我很可能會(huì)直接pass了,為什么?太懶了,無(wú)論是手懶還是思維懶都會(huì)對(duì)自己的職業(yè)產(chǎn)生不利的影響。
我自己的想法
你可能會(huì)說(shuō)你自己的想法干我毛用,的確沒(méi)什么用,但是自己后悔后想起的時(shí)候可能就有毛用了。很多大蝦,大俠,大神都說(shuō)不要造輪子,更不要重復(fù)造輪子,要使用已經(jīng)驗(yàn)證的直接拿來(lái)就好用的。理論上沒(méi)錯(cuò),但是有一點(diǎn)錯(cuò)了,那就是他們已經(jīng)理解了輪子的原理,已經(jīng)會(huì)早輪子了,而不是像很多人只是會(huì)用那樣簡(jiǎn)單。記住別人的經(jīng)驗(yàn)一定不適合你,別老是找相似點(diǎn),那樣越發(fā)的覺(jué)得自己像大神,要找不同點(diǎn),這樣才會(huì)像自己,最終才是大神。
結(jié)束廢話(huà)進(jìn)入正題
引入搜索結(jié)果五種保留兩位小數(shù)的方法
以下是網(wǎng)絡(luò)常見(jiàn)的五種方法,這里我貼上驗(yàn)證的完整代碼以便于其他同學(xué)驗(yàn)證
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);
}
}
驗(yàn)證結(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
看出什么了嗎??jī)H僅把代碼貼到IDE里面驗(yàn)證一下就可以得出上面的結(jié)論。這里是有BigDecimal來(lái)兼容所有數(shù)字類(lèi)型。
得出的結(jié)論
目前只有第三種辦法字符串處理是比較好用的,但是效率卻不是最高的,有沒(méi)有更好的答案呢?一定有的,歡迎來(lái)砸,如果我自己找到也補(bǔ)充上。