人民币金额转化汉字的java写法

人民币金额转化汉字的java写法

java 版本
原文章
https://www.cnblogs.com/shuilangyizu/p/8976450.html

修改部分代码
例子:200001.00 输出 贰拾万零壹圆整

package com.codefarm.service.utils;

/**
 * @ClassName NumToChineseUtil
 * @Deacription TODO
 * @Author alex
 * @Date 2019/12/30 17:15
 * @Version 1.0
 **/
public class NumToChineseUtil {
        private static String[] hangArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
        private static String[] unitArr = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰" };
        private static String[] unitXiaoArr = { "分", "角" };


        // 把一个浮点数分为整数和小数
        public static String[] divide(double num) {
            long zheng = (long) num;
            long xiao = Math.round((num - zheng) * 100);
            String[] arr = new String[] { String.valueOf(zheng), String.valueOf(xiao) };
            return arr;
        }
        // 把一个4位数转化为汉字
        public static String toHantr(double numStr) {
            if (numStr < 0) {
                System.out.print("请输入一个整数");
            }
            String[] arr1 = divide(numStr);
            // 得到整数部分
            String zheng = arr1[0];
            // 得到小数部分
            String xiao = arr1[1];
            String result = "";
            // 处理整数部分
            int numLen = zheng.length();


            for (int i = 0; i < numLen; i++) {
                // 得到第i位的数值
                int num = zheng.charAt(i) - '0';
                // 数值的汉字表示
                result += hangArr[num] + unitArr[numLen - 1 - i];
            }
            // 处理小数部分
            int sumLen = xiao.length();
            for (int i = 0; i < sumLen; i++) {
                if (i > 2)
                    break;// 只精确到后两位
                // 得到第i位的数值
                int xnum = xiao.charAt(i) - '0';
                // 数值的汉字表示
                result += hangArr[xnum] + unitXiaoArr[sumLen - 1 - i];
            }
            // //替换所有零拾,零百,零仟为零
            result = result.replaceAll("零拾", "零");
            result = result.replaceAll("零佰", "零");
            result = result.replaceAll("零仟", "零");
            //把零零替换为零
            while(result.indexOf("零零")!=-1){
                result = result.replaceAll("零零", "零");
            }
            result = result.replaceAll("零亿", "亿");
            result = result.replaceAll("零万", "万");
            result = result.replaceAll("零圆", "圆");
            //把零分转为空
            result = result.replaceAll("零分", "");
            if ("0".equals(xiao)){
                result=result.replaceAll("圆", "圆整");
            }

            return result;
        }
        public static void main(String[] args) {
            System.out.print(toHantr(200001.00));
        }

}

c#版
由于项目不同,所以写法不同,功能不同,但是差不多,可能待优化

        public string NumtoChinese(decimal s)
        {
            s = Math.Round(s, 2);//四舍五入到两位小数,即分
            double money = decimal.ToDouble(s);
            string[] che = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
            string[] Units = { "分", "角" };
            string[] Grees = { "元", "拾", "佰", "仟", "万", "拾万", "佰万", "仟万", "亿", "拾亿" };
            Dictionary<string, object> dic = new Dictionary<string, object>();
            #region
            dic.Add("分", "");
            dic.Add("角", "");
            dic.Add("元", "");
            dic.Add("拾", "");
            dic.Add("佰", "");
            dic.Add("仟", "");
            dic.Add("万", "");
            dic.Add("拾万", "");
            dic.Add("佰万", "");
            dic.Add("仟万", "");
            dic.Add("亿", "");
            dic.Add("拾亿", "");
            #endregion
            #region 转换小数前的代码
            for (int i = 0; money > 0.99999; i++)
            {
                int n = (int)(money % 10);
                dic[Grees[i]] = che[n];
                money = money / 10;
                money = money - n / 10;
            }
            #endregion

            #region 转换小数代码
            decimal cash = s;
            cash = cash * 100;
            for (int i = 0; i < 2; i++)
            {
                int n = (int)(cash % 10);
                dic[Units[i]] = che[n];
                cash = cash / 10;
            }
            #endregion
            StringBuilder sb = new StringBuilder();
            #region
            if (!"".Equals(dic["拾亿"]) && !"零".Equals(dic["拾亿"]))
            {
                sb.Append("" + dic["拾亿"] + "拾亿");
            }
            if (!"".Equals(dic["亿"]) && !"零".Equals(dic["亿"]))
            {
                sb.Append("" + dic["亿"] + "亿");
            }
            if (!"".Equals(dic["仟万"]) && !"零".Equals(dic["仟万"]))
            {
                sb.Append("" + dic["仟万"] + "仟万");
            }
            if (!"".Equals(dic["佰万"]) && !"零".Equals(dic["佰万"]))
            {
                sb.Append("" + dic["佰万"] + "佰万");
            }
            if (!"".Equals(dic["拾万"]) && !"零".Equals(dic["拾万"]))
            {
                sb.Append("" + dic["拾万"] + "拾万");
            }
            if (!"".Equals(dic["万"]) && !"零".Equals(dic["万"]))
            {
                sb.Append("" + dic["万"] + "万");
            }
            if (!"".Equals(dic["仟"]) && !"零".Equals(dic["仟"]))
            {
                sb.Append("" + dic["仟"] + "仟");
            }
            if (!"".Equals(dic["佰"]) && !"零".Equals(dic["佰"]))
            {
                sb.Append("" + dic["佰"] + "佰");
            }
            if (!"".Equals(dic["拾"]) && !"零".Equals(dic["拾"]))
            {
                sb.Append("" + dic["拾"] + "拾");
            }
            if (!"".Equals(dic["元"]) && !"零".Equals(dic["元"]))
            {
                sb.Append("" + dic["元"] + "元");
            }
            else
            {
                sb.Append("元");
            }
            if (!"".Equals(dic["角"]) && !"零".Equals(dic["角"]))
            {
                sb.Append("" + dic["角"] + "角");
            }
            if (!"".Equals(dic["分"]) && !"零".Equals(dic["分"]))
            {
                sb.Append("" + dic["分"] + "分");
            }
            #endregion
            return sb.ToString() ?? "";
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值