/**
* 金额转大写的工具类
*/
public class MoneyUtil {
private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";
private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
private static final double MAX_VALUE = 9999999999999.99D;
/**
* 金额
* @param v 金额
* @return
*/
public static String formatter(double v) {
return formatter(v,false);
}
/**
* 金额
* @param v 金额
* @return
*/
public static String formatter(String v) {
Double aDouble = Double.valueOf(v);
return formatter(aDouble,false);
}
/**
* 金额
* @param v
* @param flag 是否尾部为 `整`
* @return
*/
public static String formatter(String v, boolean flag) {
Double aDouble = Double.valueOf(v);
return formatter(aDouble,flag);
}
/**
* 浮点型金额
* @param v 浮点型金额
* @param flag 是否尾部有 `整`
* @return
*/
public static String formatter(double v, boolean flag) {
if (v < 0 || v > MAX_VALUE) {
return "参数非法!";
}
long l = Math.round(v * 100);
if (l == 0) {
return "零元整";
}
String strValue = l + "";
// i用来控制数
int i = 0;
// j用来控制单位
int j = UNIT.length() - strValue.length();
String rs = "";
boolean isZero = false;
for (; i < strValue.length(); i++, j++) {
char ch = strValue.charAt(i);
if (ch == '0') {
isZero = true;
if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万'
|| UNIT.charAt(j) == '元') {
rs = rs + UNIT.charAt(j);
isZero = false;
}
} else {
if (isZero) {
rs = rs + "零";
isZero = false;
}
rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
}
}
if (!rs.endsWith("分") && flag) {
rs = rs + "整";
}
rs = rs.replaceAll("亿万", "亿");
return rs;
}
public static void main(String[] args) {
System.out.println(formatter(123456789.12));
System.out.println(formatter(123456789, true));
System.out.println(formatter("123456789.125"));
System.out.println(formatter("123456789", true));
}
}
结果:
壹亿贰千叁佰肆拾伍万陆千柒佰捌拾玖元壹角贰分
壹亿贰千叁佰肆拾伍万陆千柒佰捌拾玖元整
壹亿贰千叁佰肆拾伍万陆千柒佰捌拾玖元壹角叁分
壹亿贰千叁佰肆拾伍万陆千柒佰捌拾玖元整