java 金额转中文
package utils;
/**
* @Author: flysky
* @Date: 2020/5/21 20:21
*/
public class NumberUtils {
public static String numberToChinese(String input,boolean isMoney) {
String s1 = "零壹贰叁肆伍陆柒捌玖";
String s4 = "分角整元拾佰仟万拾佰仟亿拾佰仟";
String temp = "";
String result = "";
if (input == null)
return "输入的字符串只能包括以下字符(0~9,.),且最大只能精确到仟亿,小数点只能两位!";
temp = input.trim();
float f;
try {
//System.out.println(Float.parseFloat(temp));
f = Float.parseFloat(temp);
} catch (Exception e) {
return "输入的字符串只能包括以下字符(0~9,.),且最大只能精确到仟亿,小数点只能两位!";
}
if(f==0F)temp="0";
int len = 0;
if (temp.indexOf(".") == -1)
len = temp.length();
else
len = temp.indexOf(".");
if (len > s4.length() - 3)
return ("输入字符串最大只能精确到仟亿,小数点只能两位!");
int n1 = 0;
String num = "";
String unit = "";
for (int i = 0; i < temp.length(); i++) {
if (i > len + 2) {
break;
}
if (i == len) {
continue;
}
//判断是否是负数
if((String.valueOf(temp.charAt(i)).equals("-"))) {
num = "负";
result = result.concat(num);
}else {
n1 = Integer.parseInt(String.valueOf(temp.charAt(i)));
num = s1.substring(n1, n1 + 1);
n1 = len - i + 2;
if(isMoney){
unit = s4.substring(n1, n1 + 1);
result = result.concat(num).concat(unit);
}
else{
result = result.concat(num);
}
}
//n1 = Integer.parseInt(String.valueOf(temp.charAt(i)));
}
if(isMoney){
if ((len == temp.length()) || (len == temp.length() - 1))
result = result.concat("整");
if (len == temp.length() - 2)
result = result.concat("零分");
}
else{
}
result = result.replace("零拾", "零");
result = result.replace("零佰", "零");
result = result.replace("零仟", "零");
result = result.replace("零零零", "零");
result = result.replace("零零", "零");
result = result.replace("零亿", "亿");
result = result.replace("零万", "万");
if(result.indexOf("零元")>0){
result = result.replace("零元", "元");
}
/** 这两句不能颠倒顺序 */
result = result.replace("零零零零万", "");
result = result.replace("零零零零", "");
result = result.replace("亿万", "亿");
/** 这样读起来更习惯. */
//result = result.replace("壹拾亿", "拾亿");
//result = result.replace("壹拾万", "拾万");
//如果以金额大写是以壹拾开头的,则替换成拾,否则不用替换
if(result.startsWith("壹拾")){
result = result.replace("壹拾亿", "拾亿");
result = result.replace("壹拾万", "拾万");
}
if(result.contains("零角零分")) {
result=result.replace("零角零分", "整");
}
return result;
}
public static String convertToBigNumber(int s) {
String[] c = { "","一", "二", "三", "四", "五", "六", "七", "八", "九" };
String[] d = { "", "十", "百", "仟", "万", "拾万", "百万", "千万", "亿" };
String ss = s + "";// 数字强行转换成字符串
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < ss.length(); i++) {
String k = ss.substring(i, i + 1);
int f = Integer.parseInt(k);
if (f == 0) {
int u = Integer.parseInt(ss.substring(i - 1, i));
if (u != 0) {
buffer.append(c[0]);
}
} else {
buffer.append(c[f]);
buffer.append(d[ss.length() - i - 1]);
}
}
//如果是10 或者十几,我们前面是没有1的
String numStr = buffer.toString();
if(numStr.length()==3){
if(numStr.charAt(1)=='十'&&numStr.charAt(0)=='一')
return numStr.substring(1, 3);
}
if(numStr.equals("一十")){
return "十";
}
return numStr;
}
public static void main(String args[]) {
//贰仟叁佰贰拾贰万贰仟贰佰贰拾叁元整
System.out.println(numberToChinese("23222223.00", true));
//一百二十三
System.out.println(convertToBigNumber(123 ));
}
}