小數(shù)轉(zhuǎn)換我不太常用硫惕,所以隨手做個(gè)小記。
主要記的是一個(gè)類 DecimalFormat ,
DecimalFormat是NumberFormat一個(gè)具體的子類避诽,主要是格式化十進(jìn)制數(shù)。它有各種各樣的設(shè)計(jì)用于解析和格式化數(shù)字中的數(shù)字的特性區(qū)域設(shè)置璃谨,包括整數(shù)(123)沙庐、固定點(diǎn)編號(hào)(123.4)、科學(xué)記數(shù)法(1.23E4)佳吞、百分比(12%)和貨幣金額(123美元)等拱雏。
常用到的幾個(gè)需求案例
1.保留兩位的百分比數(shù);例如:99.99%
2.金額默認(rèn)保留兩位底扳;例如:199.00¥铸抑,231,199.00元
3.最多保留幾位,最少保留幾位衷模;例如:3.141592 鹊汛, 3.14蒲赂, 3
4.舍入配置 等需求
上代碼- 幾個(gè)常用方法介紹
//輸入 5211314
// 可以無參數(shù)構(gòu)造,有參數(shù)構(gòu)造 參數(shù)有語法刁憋,詳見底部滥嘴。參考"0.0","0.0¤"至耻,"0.0%"氏涩。
DecimalFormat df = new DecimalFormat();
// 設(shè)置國家貨幣符號(hào) 參數(shù)為ISO 4217標(biāo)準(zhǔn),如果構(gòu)造參數(shù)添加‘¤’符號(hào)有梆,參考--> 5211314¥
df.setCurrency(Currency.getInstance("CNY"));
// 設(shè)置最多保留幾位.參考--> 5211314.00
df.setMaximumFractionDigits(2);
// 設(shè)置分組大小.參考--> 5,211,314
df.setGroupingSize(3);
// 設(shè)置乘以的倍數(shù).參考--> 521131400
df.setMultiplier(100);
// 設(shè)置正數(shù)前綴,參考--> @5211314
df.setPositivePrefix("@");
// 設(shè)置正數(shù)后綴 但是替換掉 已有字符 參考--> 5211314@
df.setPositiveSuffix("@");
// 設(shè)置負(fù)數(shù)前綴,只對(duì)負(fù)數(shù)有效 參考-->@-1
df.setNegativePrefix("@");
// 設(shè)置負(fù)數(shù)后綴 但是替換掉 已有字符 只對(duì)負(fù)數(shù)有效 參考--> -1@
df.setNegativeSuffix("@");
// 設(shè)置四舍五入的模式 詳見 RoundingMode 類 寫的 非常詳細(xì)
df.setRoundingMode(RoundingMode.DOWN);
// 格式化 成 想要的結(jié)果
df.format(5211314);
比較通用的方法
/**
* 獲取格式化的double數(shù)的字符串
*
* 直接截取數(shù)值 不四舍五入
*
* @param num 需要被格式化的數(shù)
* @param sample 具體樣式
* sample="0.00元"; 效果 : 2018.99元;
* sample="(萬元)0.00"; 效果 : (萬元)2018.99;
* sample="0.00¥"; 效果 : 2018.99¥;
* sample="¥0.00"; 效果 : ¥2018.99;
* sample="0.00%"; 效果 : 201899.00%; (自動(dòng)乘以100)
* @return 格式化后的字符串
*/
public static String getDoubleFormat(double num, String sample){
DecimalFormat df=new DecimalFormat(sample);
df.setGroupingSize(0);
df.setRoundingMode(RoundingMode.DOWN);
return df.format(num);
}
//百分比 和 金額數(shù)值 打印
System.out.println(getDoubleFormat(0.99989,"0.00%"));//打印結(jié)果: 99.98%,自動(dòng)乘以100
System.out.println(getDoubleFormat(1,"0.00%"));//打印結(jié)果: 100.00%,自動(dòng)乘以100
System.out.println(getDoubleFormat(1.2577,"0.00 萬元"));//打印結(jié)果: 1.25 萬元
System.out.println(getDoubleFormat(12577,"0.00 元"));//打印結(jié)果: 12577.00 元
System.out.println(getDoubleFormat(12577,"¥ 0.00"));//打印結(jié)果: ¥ 12577.00
帶位分隔的格式化的double數(shù)的字符串
/**
* 獲取帶位分隔格式化的double數(shù)的字符串
* (帶位分隔的就比較麻煩點(diǎn)了)
*
* 直接截取數(shù)值 不四舍五入
*
* @param num 需要被格式化的數(shù)
* @param groupingSize 需要幾位整數(shù)分隔
* @param fractionDigits 需要保留幾位小數(shù)
* @param suffix 后綴字符
* @return 格式化后的字符串
*/
public static String getGroupingFormat(double num,int groupingSize, int fractionDigits,String suffix){
DecimalFormat df=new DecimalFormat();
df.setMaximumFractionDigits(fractionDigits);
df.setMinimumFractionDigits(fractionDigits);
df.setGroupingSize(groupingSize);
df.setPositiveSuffix(suffix);
df.setNegativeSuffix(suffix);
df.setRoundingMode(RoundingMode.DOWN);
return df.format(num);
}
System.out.println(getGroupingFormat(12577,3,2," 元"));//打印結(jié)果: 12,577.00 元
System.out.println(getGroupingFormat(12577.998,3,2," 元"));//打印結(jié)果: 12,577.99 元
System.out.println(getGroupingFormat(177.998,3,2," ¥"));//打印結(jié)果: 177.99 ¥
控制最多保留幾位,最少保留幾位
//最多保留幾位
df.setMaximumFractionDigits(6);
//最少保留幾位, 可以是0 就是 取整數(shù)
df.setMinimumFractionDigits(2);
四舍五入的模式 詳見: RoundingMode
ISO 4217標(biāo)準(zhǔn) 詳見: ISO 4217