double类型的数字变为汉字(金额)

来源:互联网 发布:ue软件使用 编辑:程序博客网 时间:2024/06/15 17:45

package com.string.test;

import java.text.DecimalFormat;

public class MoneyConversionUtil {
   
private static final String NUMBER_STR = "零壹贰叁肆伍陆柒捌玖"; // 0-9所对应的汉字
    private static final String MONEY_UNIT = "厘分角元拾佰仟万拾佰仟亿拾佰仟万"; // 货币单位列表
    private static final DecimalFormat df = new DecimalFormat("#.000"); // 进行货币格式化

   
/**
     * 得到货币的中文标准表示
     *
     *
@param double value
     *
@return String
    
*/
   
public static String show(double value) {
        StringBuffer resultStr
= new StringBuffer();// 返回的最终结果

        StringBuffer valueStr
= new StringBuffer(df.format(value)).reverse();// 将数据倒序后进行分析
        valueStr.deleteCharAt(valueStr.indexOf("."));

       
int zeroSize=0;
       
int valueStr_length = valueStr.length();// 得到拆分后的长度
        for (int i = 0; i < valueStr_length; i++) {
           
int posNum = Integer.valueOf(valueStr.substring(i, i + 1));// 读取出数据位的数据转换为数值
            String x = "";
           
if (0 == posNum) {
                x
= NUMBER_STR.substring(posNum, posNum + 1);//出现0的时候不添加单位中文表示
                zeroSize++;
            }
else {
                x
= NUMBER_STR.substring(posNum, posNum + 1)
                       
+ MONEY_UNIT.substring(i, i + 1);// 数字中文表示 + 单位中文表示
            }
            resultStr.insert(
0, x);
        }
       
       
if(zeroSize!=0){
           
// 对resultStr中可能存在的双零情况进行解决
            for (int j = 0; j < resultStr.length(); j++) {
                String front
= resultStr.substring(j, j+1);
                String back
= resultStr.substring(j, j+1);
               
if(front.equals(back) && front.equals("")){
                    resultStr.deleteCharAt(j);
                }
            }
        }
       
       
return resultStr.toString();

    }

   
public static void main(String[] args) {
        System.out.println(show(
1000.567));
       
// 壹仟贰佰零拾玖元伍角陆分柒厘
    }
}

原创粉丝点击