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


    最近看到一个把一个浮点数转化为汉字人民币的小题,感觉很有意思就去用java实现了一下,没想到没有想得那么简单,在网上搜了一下也不近人意,经过几次修改后,现在实现了,现在分享一下。

         一、当输入一个浮点数后,我们要把它的整数部分和小数部分取出来。

         二、然后把相应的整数、小数部分转化为汉字读法。

         三、按照汉语的读法,不能存在零仟、零佰、零拾这样的读法但可以存在零万、零元等读法,这时候我们壹仟零佰零拾零陆圆把零佰、零拾这样的替换为零,变为壹仟零零陆圆,我们把连续为零零的替换为零就OK了。

    package test;
    
    public class NumToRmb{
        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("零仟", "零");
            //把零零替换为零
            if (result.indexOf("零零") != -1) {
                result = result.replaceAll("零零", "零");
            }
            result = result.replaceAll("零亿", "亿");
            result = result.replaceAll("零万", "万");
            result = result.replaceAll("零圆", "圆");
    
            return result;
        }
        public static void main(String[] args) {
            System.out.print(toHantr(1213301.56));
        }
    }
  • 相关阅读:
    C#--SqlDependency监控数据库表的变化
    C#--尝试读取或写入受保护的内存,这通常指示其他内存已损坏。
    C#--lock线程锁
    C#--抽象类(转载)
    ArrayList源码分析
    多线程编程bug起源分析
    Linux-CentOS-Nginx安装
    记一次springMVC的跨域解决方案
    Linux下压缩工具gzip和归档工具tar及其实战shell应用
    Docker在Centos 7上的部署
  • 原文地址:https://www.cnblogs.com/shuilangyizu/p/8976450.html
Copyright © 2020-2023  润新知