[Java] 纯文本查看 复制代码
private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分"; // 单位字符串
private static final String CASEVAL = "零壹贰叁肆伍陆柒捌玖"; // 数量字符串
private static final double MAX_VALUE = (Long.MAX_VALUE)/100; // 最大值限定
public static String MoneyCase(double v) {
//限定所取参数范围
if (v < 0 || v > MAX_VALUE) {
return "参数非法!";
}
//将原double数据乘100将小数部分转化为整数然后存入一个长整型便于转换。
long l = Math.round(v * 100);
if (l == 0) {
return "零元整";
}
//将数据拼接成字符串,便于转换操作
String value = l + "";
// 通过j变量通过索引来控制单位,除去无效高位,
int j = UNIT.length() - value.length();
//创建接收字符串
String rs = "";
//定义isZero变量用于判断当前位是否为0
boolean isZero = false;
//通过i变量检索value字符串进行每一位数值以及单位的构造
for (int i= 0; i < value.length(); i++, j++) {
//提取当前位置的数量
char val = value.charAt(i);
//提取当前单位
char unit = UNIT.charAt(j);
if (val == '0') {
isZero = true;
if (unit == '亿' || unit == '万' || unit == '元') {
rs = rs + unit;
isZero = false;
}
} else {
if (isZero) {
rs = rs + "零";
isZero = false;
}
rs = rs + CASEVAL.charAt(val - '0') + unit;
}
}
if (!rs.endsWith("分")) {
rs = rs + "整";
}
rs = rs.replaceAll("亿万", "亿");
return rs;
}