java numberformat_NumberFormat(数字格式化类)
前言
在工作當中,可能經常會遇到比如數據保留兩位小數顯示,去除后面多余0,按指定格式輸出數據這種需求,有時隔得時間久了也難免會忘記,所以就稍作總結方便今后查看,同時最后提供一個工具類方便今后使用。
NumberFormat
NumberFormat 是所有數值格式的抽象基類。此類提供格式化和解析數值的接口。NumberFormat 還提供了一些方法來確定哪些語言環境具有數值格式,以及它們的名稱是什么。
NumberFormat 可用于格式化和解析任何語言環境的數值。使代碼能夠完全獨立于小數點、千位分隔符甚至所用特定小數位數的語言環境約定,并與數值格式是否為偶小數無關。
數值格式化
getInstance()、getNumberInstance()。返回當前默認語言環境的通用數值格式。
getInstance(Locale)、getNumberInstance(Locale)。返回指定語言環境的通用數值格式。
NumberFormat.setMinimumIntegerDigits(int)。設置數的整數部分所允許的最小位數。
NumberFormat.setMaximumIntegerDigits(int)。設置數的整數部分所允許的最大位數。
NumberFormat.setMinimumFractionDigits(int)。設置最少小數點位數,不足的位數以0補位,超出的話按實際位數輸出。
NumberFormat.setMaximumFractionDigits(int)。設置最多保留小數位數,不足不補0。
import java.text.NumberFormat;
import java.util.Locale;
public class HelloWorld {
public static void main(String[] args) {
numberFormat();
}
private static void numberFormat() {
double d = 12345.676688000;
NumberFormat nf = NumberFormat.getNumberInstance();
System.out.println(nf.format(d));//12,345.677 默認只保留到小數點后三位
nf.setMinimumIntegerDigits(2);
System.out.println(nf.format(d));//12,345.677 整數部分大于2位按默認最大小數位數3位輸出
d = 1234.0;
nf.setMaximumIntegerDigits(3);
System.out.println(nf.format(d));//234
nf = NumberFormat.getInstance();
d = 12345.6766;
nf.setMinimumFractionDigits(1);
System.out.println(nf.format(d));//12,345.677 小數部分大于1位,按默認最大小數位數3位輸出
nf.setMinimumFractionDigits(5);
System.out.println(nf.format(d));//12,345.67660 不夠位數補0
nf.setMaximumFractionDigits(1);
System.out.println(nf.format(d));//12,345.7
nf = NumberFormat.getNumberInstance(Locale.US);
d = 12345.6789;
System.out.println(nf.format(d));//12,345.679
nf = NumberFormat.getNumberInstance(Locale.FRANCE);
System.out.println(nf.format(d));//12 345,679
}
}
DecimalFormat
“0”——表示一位數值,如沒有,顯示0。如“0000.0000”,整數位或小數位>4,按實際輸出,<4整數位前面補0小數位后面補0,湊足4位。
“#”——表示任意位數的整數。如沒有,則不顯示。在小數點位使用,只表示一位小數,超出部分四舍五入。如:
“#”:無小數,小數部分四舍五入。
“.#”:整數部分不變,一位小數,四舍五入。
“.##”:整數部分不變,二位小數,四舍五入。
“.”——表示小數點。
“,”——與模式“0”一起使用,表示逗號。
private static void decimalFormat() {
double d1 = 123456.36987, d2 = 12.3698;
DecimalFormat nf = new DecimalFormat("0000.000");
System.out.println("d1=" + nf.format(d1) + " d2=" + nf.format(d2));//d1=123456.370 d2=0012.370
nf = new DecimalFormat("#");
System.out.println("d1=" + nf.format(d1));//d1=123456
nf = new DecimalFormat(".####");
System.out.println("d1=" + nf.format(d1));//d1=123456.3699
nf = new DecimalFormat("0000,0000.00000");//注意“,”不能放在小數部分
System.out.println("d1=" + nf.format(d1));//d1=0012,3456.36987
}
貨幣格式化
getCurrencyInstance()。靜態方法,建立一個NumberFormat類的對象并返回引用,該引用指定貨幣格式為系統預設的貨幣格式。
getCurrencyInstance(Locale) 。靜態方法,建立一個NumberFormat類的對象,并返回引用,該引用的貨幣格式由Locale指定。Locale類在java.util包中。
import java.text.NumberFormat;
import java.util.Locale;
public class HelloWorld {
public static void main(String[] args) {
currencyFormat();
}
private static void currencyFormat() {
//按系統預設的貨幣格式輸出,這里是人民幣
NumberFormat nf = NumberFormat.getCurrencyInstance();
System.out.println(nf.format(123.456));//¥123.46
//按指定的貨幣格式輸出,這里是美元
//Locale locale = Locale.US;
nf = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println(nf.format(123.456));//$123.46
}
}
百分比格式化
getPercentInstance()。靜態方法,創建一個NumberFormat類的對象并返回其引用。該對象指定百分比格式為系統預設格式。
getPercentInstance(Locale)。靜態方法,創建一個NumberFormat類的對象并返回引用。該對象的百分比格式由Locale來指定。
private static void percentFormat() {
//按系統預設百分比格式輸出
double d = 123.456;
NumberFormat nf = NumberFormat.getPercentInstance();
System.out.println(nf.format(d));//12,346%
//按指定百分比格式輸出,這里是法國格式
nf = NumberFormat.getPercentInstance(Locale.FRANCE);
System.out.println(nf.format(d));//12 346 %
}
工具類
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class NumberDealUtil {
/**
* 移除數字前面和后面冗余的0,只保留3位小數
*
* @param isFormat 是否需要千位分隔符(,)這種格式輸出
* @param num
* @return
*/
public static String trim0(boolean isFormat, double num) {
NumberFormat nf = NumberFormat.getInstance();
if (!isFormat) {
//設置輸出格式是否使用“,”分組,默認是使用的
nf.setGroupingUsed(false);
}
String result = nf.format(num);
// return isFormat ? result : result.replace(",", ""); //用上面代碼替換去除分隔符操作
return result;
}
/**
* 移除數字前面和后面冗余的0
*
* @param isFormat 是否需要千位分隔符(,)這種格式輸出
* @param num
* @param fractionDigit 要保留的小數位數
* @return
*/
public static String trim0(boolean isFormat, double num, int fractionDigit) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(fractionDigit);
//setMaximumFractionDigits不會保留小數點和后面多余的0,不需下面正則去除
// if (result.contains(".") && result.endsWith("0")) {
// result = result.replaceAll("0+?$", "");//去掉多余的0
// result = result.replaceAll("[.]$", "");//如最后一位是.則去掉
// }
if (!isFormat) {
//設置輸出格式是否使用“,”分組,默認是使用的
nf.setGroupingUsed(false);
}
String result = nf.format(num);
// return isFormat ? result : result.replace(",", "");
return result;
}
/**
* 指定位數輸出,不足補0
* 整數部分如果位數大于需要的位數按實際位數輸出
* 小數部分如果大于需要的位數四舍五入
*
* @param num
* @param integerDigit 整數部分位數
* @param fractionDigit 小數部分位數
* @return
*/
public static String add0Format(double num, int integerDigit, int fractionDigit) {
StringBuilder rule = new StringBuilder();
if (integerDigit <= 0) {
rule.append("#");
} else {
for (int i = 0; i < integerDigit; i++) {
rule.append("0");
}
}
if (fractionDigit > 0) {
rule.append(".");
for (int i = 0; i < fractionDigit; i++) {
rule.append("0");
}
}
DecimalFormat df = new DecimalFormat(rule.toString());
return df.format(num);
}
/**
* 保留幾位小數,不足不補0,小數部分冗余的0也不顯示
*
* @param num
* @param fractionDigit 要保留小數的位數
* @return
*/
public static String fractionDigitFormat(double num, int fractionDigit) {
/*方法一*/
// StringBuilder rule = new StringBuilder("#");
// if (fractionDigit > 0) {
// rule.append(".");
// for (int i = 0; i < fractionDigit; i++) {
// rule.append("#");
// }
// }
// DecimalFormat df = new DecimalFormat(rule.toString());
// return df.format(num);
/*方法二*/
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(fractionDigit);
//設置輸出格式是否使用“,”分組,這里不使用
nf.setGroupingUsed(false);
return nf.format(num);
}
}
總結
以上是生活随笔為你收集整理的java numberformat_NumberFormat(数字格式化类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩转 Tomcat 配置必备的 10 个
- 下一篇: 程序员最反感的十件事,你有同感吗?