最近项目中用到金额转大写的地方,然后hutool里面正好有这个功能。
工具类路径:
cn.hutool.core.convert.Convert#digitToChinese
方法描述:
/**
* 金额转为中文形式
*
* @param n 数字
* @return 中文大写数字
* @since 3.2.3
*/
public static String digitToChinese(Number n) {
if(null == n) {
return "零";
}
return NumberChineseFormatter.format(n.doubleValue(), true, true);
}
参数是Number类型,而Bigdecimal也是此类的子类,所以使用Bigdecimal和这个类就可以实现功能了
后来我又看了这个方法的实现,里面调用了NumberChineseFormatter这个类的方法,而这个类又封装了一层方法
cn.hutool.core.convert.NumberChineseFormatter#format(double, boolean, boolean)
这个方法多了两个参数,isUseTraditional和isMoneyMode,分别表示是否使用繁体大写和是否表示金额
/**
* 阿拉伯数字转换成中文,小数点后四舍五入保留两位. 使用于整数、小数的转换.
*
* @param amount 数字
* @param isUseTraditional 是否使用繁体
* @param isMoneyMode 是否为金额模式
* @return 中文
*/
public static String format(double amount, boolean isUseTraditional, boolean isMoneyMode) {
//此处省略hutool方法体代码
}
isUseTraditional:是否转为繁体。false将阿拉伯数字转为 "一", "二", "三"简体形式,true将阿拉伯数字转换为"壹", "贰", "叁"繁体形式;
isMoneyMode:是否金额模式。false将数字转为纯中文数字,true将阿拉伯数字转为带"元","角","分"的中文数字。
总结:如果用这个方法,既可以将数字转简体中文,又可以转为金额形式。
应用:
一、将阿拉伯数字序号转为简单中文数字:
List<Number> numbers = Arrays.asList(1,2.0,3.31,4.71,5.86);
System.out.println("数字转序号:");
numbers.forEach(item ->{
System.out.println(NumberChineseFormatter.format(item.doubleValue(), false, false));
});
控制台输出:
数字转序号:
一
二
三点三一
四点七一
五点八六
二、将阿拉伯金额转为中文大写金额
List<Number> numbers = Arrays.asList(1,2.0,3.31,4.71,5.86);
System.out.println("数字转金额:");
numbers.forEach(item ->{
System.out.println(NumberChineseFormatter.format(item.doubleValue(), true, true));
});
控制台输出:
数字转金额:
壹元整
贰元整
叁元叁角壹分
肆元柒角壹分
伍元捌角陆分