很多小伙伴在使用java的時(shí)候可能會(huì)遇到這樣的需求:一個(gè)浮點(diǎn)型的數(shù)據(jù),我只需要保留兩位小數(shù)即可。而現(xiàn)實(shí)中往往的輸出情況卻大相徑庭。其實(shí)這都是數(shù)據(jù)沒(méi)有進(jìn)行格式化的結(jié)果,java提供了很多方法來(lái)進(jìn)行數(shù)據(jù)格式化,通過(guò)數(shù)據(jù)格式化,java可以將計(jì)算結(jié)果保留兩位小數(shù)。接下來(lái)小編通過(guò)java怎么保留兩位小數(shù),來(lái)介紹一下java的浮點(diǎn)型數(shù)據(jù)格式化吧!
使用BigDecimal類(lèi)進(jìn)行數(shù)據(jù)格式化
?BigDecimal
?類(lèi)是?java.math
?包中提供的一個(gè)API類(lèi),它可以用來(lái)對(duì)超過(guò)16位有效位的數(shù)據(jù)進(jìn)行精確的運(yùn)算。它提供了?format()
?方法可以用來(lái)進(jìn)行對(duì)數(shù)值的格式化控制。具體格式化代碼如下:
public static String format1(double value){
BigDecimal bd = new BigDecimal(value);//創(chuàng)建一個(gè)bd對(duì)象,將要轉(zhuǎn)換的值value傳入構(gòu)造函數(shù)
bd = bd.setScale(2, RoundingMode.HALF_UP);//調(diào)用setScale方法進(jìn)行數(shù)據(jù)格式化,保留兩位小數(shù),采用四舍五入規(guī)則
return bd.toString(); //返回bd對(duì)象的值(轉(zhuǎn)化為string形式)
}
使用DecimalFormat類(lèi)進(jìn)行數(shù)據(jù)格式化
?DecimalFormat
?類(lèi)是?NumberFormat
?的一個(gè)具體子類(lèi),是用來(lái)格式化十進(jìn)制數(shù)字的。使用該方法也可以簡(jiǎn)單的格式化數(shù)據(jù)。具體格式化代碼如下:
public static String format2(double value) {
DecimalFormat df = new DecimalFormat("0.00");//創(chuàng)建一個(gè)df對(duì)象,傳入0.00表示構(gòu)造一個(gè)保留小數(shù)點(diǎn)后兩位的df對(duì)象
df.setRoundingMode(RoundingMode.HALF_UP);//設(shè)置規(guī)則,這里采用的也是四舍五入規(guī)則
return df.format(value);//返回value(在返回之前使用df對(duì)象的格式化方法將數(shù)據(jù)格式化)
}
使用NumberFormat類(lèi)進(jìn)行數(shù)據(jù)格式化
?NumberFormat
?是所有數(shù)字格式的抽象基類(lèi)。它用來(lái)提供格式化和解析數(shù)字的接口。它可以幫助開(kāi)發(fā)者格式化和解析任何語(yǔ)言環(huán)境的數(shù)字。使用該方法格式化數(shù)據(jù)的代碼如下:
public static String format3(double value) {
NumberFormat nf = NumberFormat.getNumberInstance();//獲取NumberFormat類(lèi)的實(shí)例需要調(diào)用getInstance()方法
nf.setMaximumFractionDigits(2);//設(shè)置強(qiáng)制保留兩位,避免出現(xiàn)10.00的時(shí)候返回10(也就是不滿(mǎn)兩位要用零補(bǔ)足兩位)
nf.setMinimumFractionDigits(2);//設(shè)置強(qiáng)制保留兩位,如果有多出的就采用計(jì)數(shù)保留進(jìn)行處理(也就是超過(guò)兩位的要進(jìn)行進(jìn)位換算)
nf.setRoundingMode(RoundingMode.HALF_UP);//設(shè)置計(jì)數(shù)保留規(guī)則,這里采用四舍五入法
nf.setGroupingUsed(false);//是否將數(shù)據(jù)使用逗號(hào)進(jìn)行分組
return nf.format(value);//返回value(在返回之前使nf對(duì)象的格式化方法將數(shù)據(jù)格式化)
}
使用java.util.Formatter進(jìn)行數(shù)據(jù)格式化
使用?java.util.Formatter
?也可以進(jìn)行數(shù)據(jù)的格式化。具體代碼如下:
public static String format4(double value) {
return new Formatter().format("%.2f", value).toString();
//使用java.util.Formatter的format方法,可以將value數(shù)值格式化成指定格式的數(shù)據(jù)
//%是格式化字符(與C語(yǔ)言類(lèi)似).2表示保留小數(shù)點(diǎn)后兩位,f表示傳入的這個(gè)數(shù)值是浮點(diǎn)型
//最后使用toString方法將數(shù)值轉(zhuǎn)換成字符串
}
使用String.format進(jìn)行數(shù)據(jù)格式化(最常見(jiàn)簡(jiǎn)單的方法)
?String.format
?作為文本處理工具,為我們提供了強(qiáng)大而且豐富的字符串格式化功能,它也可以進(jìn)行浮點(diǎn)數(shù)的格式化。具體的代碼如下:
public static String format5(double value) {
return String.format("%.2f", value).toString();
//%是格式化字符(與C語(yǔ)言類(lèi)似).2表示保留小數(shù)點(diǎn)后兩位,f表示傳入的這個(gè)數(shù)值是浮點(diǎn)型
//最后使用toString方法將數(shù)值轉(zhuǎn)換成字符串
}
以上可以堪稱(chēng)是最簡(jiǎn)單的方法了。但之所以稱(chēng)它常見(jiàn),是因?yàn)樗梢灾苯釉?print
?中使用。例如:
double num = 123.4567899;
System.out.print(String.format("%.2f", num)); //直接在print中使用
小結(jié)
以上就是java怎么保留兩位小數(shù)的幾種常見(jiàn)方法。小編個(gè)人認(rèn)為掌握其中的一兩種即可(因?yàn)樗鼈冇械暮?jiǎn)單,有的則具有共通之處),當(dāng)然掌握更多的方法可以擁有更多的選擇,各位小伙伴也可以多學(xué)一些知識(shí)。
更多java基礎(chǔ)知識(shí)點(diǎn),就到java教程。