玄学的事情,以前读书的时候做过这个处理,我当时应该是做了一天,没有搞定,后来睡了一觉,晚上做梦给解出来了,当然那个方法我也忘了,鬼知道当时自己咋想的。
前段时间突然想到了这个事情,然后尝试自己再写一下看看
package com.andy.util;
public class NumToMoney {
public static void main(String[] args) {
String num = "12212312346789123.123";//一京二千二百一十二兆三千一百二十三亿四千六百七十八万九千一百二十三元一角二分
String[] danwei = {"元","万","亿","兆","京"};//单位还可以往上,理论上说,只要String能装下,就能转换出来结果
String[] jiwei = {"十","百","千"};
if(!checkNum(num)){
System.out.println("数字错误");
}
String[] num1 = null;
StringBuffer stringBuffer = new StringBuffer();
//拆分整数部分与小数部分
if(num.indexOf(".")==-1){
stringBuffer = new StringBuffer(num).reverse();
}else{
String[] split = num.split("\\.");
num1 = split;
stringBuffer = new StringBuffer(split[0]).reverse();
}
//String 倒叙
StringBuffer jieguo = new StringBuffer();
if(num1==null){
jieguo.append("整");
}
//思路是将字符串倒叙,然后拼接单位 如123 变成321 依次拼接单位 3+元+2+十+1百 再反序输出就搞定了
//因为没法确定最高位是什么单位,所以用倒叙,这样不管多大,只要单位能跟上,都能得出结果
for(int j = 0,i=0; j < stringBuffer.length(); j++){
if(j%4 == 0){
//每四次取一次单位
jieguo.append(danwei[i]);
i++;
}else {
//不取单位时取计数位
jieguo.append(jiwei[(j-1) % 4]);
}
jieguo.append(getValue(stringBuffer,j));
}
jieguo.reverse();
//小数部分 只考虑角和分
if(num1!=null){
if(num1[1].length()>=1){
jieguo.append(getValue(new StringBuffer(num1[1]),0));
jieguo.append("角");
}
if(num1[1].length()>=2){
jieguo.append(getValue(new StringBuffer(num1[1]),1));
jieguo.append("分");
}
}
System.out.println(jieguo);
}
//匹配 1-9的汉字
public static String getValue(StringBuffer stringBuffer,int j){
String shuzhi = "";
switch (stringBuffer.charAt(j)){
case '1': shuzhi = "一";break;
case '2': shuzhi = "二";break;
case '3': shuzhi = "三";break;
case '4': shuzhi = "四";break;
case '5': shuzhi = "五";break;
case '6': shuzhi = "六";break;
case '7': shuzhi = "七";break;
case '8': shuzhi = "八";break;
case '9': shuzhi = "九";break;
}
return shuzhi;
}
/**
* 检查是否是数字
**/
public static boolean checkNum(String num){
try {
double a = Double.parseDouble(num);
}catch (Exception e){
return false;
}
return true;
}
}
如果有需要,可以直接用这个代码