`
极品老驴
  • 浏览: 1338 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

常用Utilities共享之一:中文表达整数和金额

UP 
阅读更多
中文表达整数:
    /**
     * 将小于1万万亿的整数表达为中文,传统中文标准数字单位为:个,十,
     * 佰,仟,万,亿,兆,京,后面四个都是以万为进的单位,但兆和京在现
     * 代很少使用,故大于亿均以万亿为单位。
     *
     * @param n 小于1万万亿的整数
     * @return 对应的中文习惯表达的数值字符串串。
     */
    public static String convertNumToChinese(long n) {
        if (n >= (long) 1e+8 * (long) 1e+8) {
            return "";
        }

        if (n == 0) {
            return CHINESE_NUMBERS[0];
        }

        StringBuffer sb = new StringBuffer();

        int yi = 0, wan = 0, qian = 0, wanYi = 0;

        if (n >= 100000000) {
            yi = (int) (n / 100000000);
            wan = (int) ((n - (long) yi * 100000000) / 10000);
            qian = (int) (n % 10000);
        } else if (n >= 10000) {
            wan = (int) (n / 10000);
            qian = (int) (n % 10000);
        } else if (n >= 0) {
            qian = (int) n;
        }


        if (yi != 0) {
            wanYi = yi / 10000;
            yi = yi - wanYi * 10000;
            if (wanYi > 0) {
                sb.append(cunvertNumForLessThanTenThousand(wanYi)).append(CHINESE_NUMBER_UNITS[4]);
            }
            if (yi < 1000) {
                sb.append(CHINESE_NUMBERS[0]);
            }
            sb.append(cunvertNumForLessThanTenThousand(yi)).append(CHINESE_NUMBER_UNITS[8]);
        }


        if ((yi != 0 && wan < 1000 && wan > 0) ||
                (wan == 0 && yi != 0)) {
            sb.append(CHINESE_NUMBERS[0]);
        }
        if (wan > 0) {
            sb.append(cunvertNumForLessThanTenThousand(wan)).append(CHINESE_NUMBER_UNITS[4]);
        }


        if (wan != 0 && qian < 1000 && qian > 0) {
            sb.append(CHINESE_NUMBERS[0]);
        }
        sb.append(cunvertNumForLessThanTenThousand(qian)).append(CHINESE_NUMBER_UNITS[0]);


        return sb.toString();
    }

    public final static String[] CHINESE_NUMBERS = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
    public final static String[] CHINESE_NUMBER_UNITS = {"", "十", "百", "千", "万", "十万", "百万", "千万", "亿"};

    /**
     * 将小于1万的整数为以中文习惯来表达.
     *
     * @param n 小于1万的整数
     * @return 对应的中文习惯表达的数值字符串
     */
    private static String cunvertNumForLessThanTenThousand(int n) {
        if (n < 0 || n > 9999) {
            return null;
        }

        if (n == 0) {
            return "";
        }


        StringBuffer sb = new StringBuffer();

        int ge = 0, shi = 0, bai = 0, qian = 0;

//        wan = n / 10000;
        qian = n / 1000;
        bai = (n - qian * 1000) / 100;
        shi = (n - qian * 1000 - bai * 100) / 10;
        ge = n % 10;

//        if (wan != 0) {
//            sb.append(CHINESE_NUMBERS[wan]).append(CHINESE_NUMBER_UNITS[4]);
//        }

        if (qian != 0) {
            sb.append(CHINESE_NUMBERS[qian]).append(CHINESE_NUMBER_UNITS[3]);
        }

        if (bai != 0) {
            sb.append(CHINESE_NUMBERS[bai]).append(CHINESE_NUMBER_UNITS[2]);
        } else if (qian != 0 && !(shi == 0 && ge == 0)) {
            sb.append(CHINESE_NUMBERS[0]);
        }

        if (shi != 0) {
            sb.append(CHINESE_NUMBERS[shi]).append(CHINESE_NUMBER_UNITS[1]);
        } else if (bai != 0 && ge != 0) {
            sb.append(CHINESE_NUMBERS[0]);
        }

        if (ge != 0) {
            sb.append(CHINESE_NUMBERS[ge]);
        }

        return sb.toString();
    }



中文表达金额:
    /**
     * 阿拉伯数据格式金额转中文大写金额。基于他人代码改进而来,原代码存在浮点精度bug,原作者未知。
     *
     * @param value
     * @return
     */
    public static String numMonyToZhBig(BigDecimal value) {
        char[] hunit = {'拾', '佰', '仟'};//段内位置表示
        char[] vunit = {'万', '亿'};//段名表示
        char[] digit = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};//数字表示
        value = value.setScale(2, RoundingMode.HALF_UP);
        String valStr = value.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP).toString();//转化成字符串
        String head = valStr.substring(0, valStr.length() - 2);//取整数部分
        String rail = valStr.substring(valStr.length() - 2);//取小数部分

        String prefix = "";//整数部分转化的结果
        String suffix = "";//小数部分转化的结果
        //处理小数点后面的数
        if (rail.equals("00")) {//如果小数部分为0
            suffix = "整";
        } else {
            suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分";//否则把角分转化出来
        }
        //处理小数点前面的数
        char[] chDig = head.toCharArray();//把整数部分转化成字符数组
        char zero = '0';//标志'0'表示出现过0
        byte zeroSerNum = 0;//连续出现0的次数
        for (int i = 0; i < chDig.length; i++) {//循环处理每个数字
            int idx = (chDig.length - i - 1) % 4;//取段内位置
            int vidx = (chDig.length - i - 1) / 4;//取段位置
            if (chDig[i] == '0') {//如果当前字符是0
                zeroSerNum++;//连续0次数递增
                if (zero == '0') {//标志
                    zero = digit[0];
                } else if (idx == 0 && vidx > 0 && zeroSerNum < 4) {
                    prefix += vunit[vidx - 1];
                    zero = '0';
                }
                continue;
            }
            zeroSerNum = 0;//连续0次数清零
            if (zero != '0') {//如果标志不为0,则加上,例如万,亿什么的
                prefix += zero;
                zero = '0';
            }
            prefix += digit[chDig[i] - '0'];//转化该数字表示
            if (idx > 0) prefix += hunit[idx - 1];
            if (idx == 0 && vidx > 0) {
                prefix += vunit[vidx - 1];//段结束位置应该加上段名如万,亿
            }
        }

        if (prefix.length() > 0) prefix += '圆';//如果整数部分存在,则有圆的字样
        return prefix + suffix; //返回正确表示
    }
0
1
分享到:
评论

相关推荐

    TuneUp Utilities 2011中文版+密钥

    首先,TuneUp Utilities 2011的核心功能之一是系统优化。它包含了一系列智能工具,如启动项管理、磁盘碎片整理、内存优化等,可以帮助用户调整系统设置,减少不必要的后台进程,提高电脑启动速度和整体运行效率。...

    UtilitiES UtilitiES UtilitiES

    UtilitiES UtilitiES UtilitiES UtilitiES UtilitiES

    Magic Utilities v6.11

    卸载管理是Magic Utilities的核心功能之一。它能帮助用户快速、彻底地卸载不常用或者不需要的程序,避免传统卸载方式可能遗留的注册表项和文件残留,从而保持系统的整洁和高效。通过这个功能,用户可以轻松找到并...

    TuneUp Utilities 2010官方简体中文注册版

    综上所述,TuneUp Utilities 2010官方简体中文注册版是一款强大的系统维护和优化工具,它集成了多种实用功能,能够帮助用户全面优化和保护他们的计算机系统,提高电脑的使用体验。通过安装和应用注册补丁,用户可以...

    utilities:通用实用程序模块

    在Python编程语言中,"utilities"通常指的是一个包含各种通用功能和辅助方法的模块或库。这样的模块设计目的是为了提高代码的复用性,减少重复编写相同或相似功能的代码,提升开发效率。"utilities:通用实用程序模块...

    精通MySQL Utilities 中文手册

    ### MySQL Utilities 中文手册知识点概览 #### 一、引言 MySQL Utilities 是一套由 MySQL 官方提供的工具集合,旨在简化 MySQL 数据库的管理和维护工作。这些工具可以帮助数据库管理员(DBA)更高效地完成一系列复杂...

    Norton Utilities V5.0

    Norton Utilities V5.0,作为一款在DOS操作系统时代极具影响力的软件,它集合了一系列强大的磁盘管理和系统优化工具,为当时的计算机用户提供了无与伦比的便捷性与效率。这个版本在英文环境下运行,其功能丰富多样,...

    TuneUp Utilities简体中文版

    TuneUp Utilities是来自德国的世界级系统优化软件,在2010版本时曾取中文名趣能系统优化专家,可能官方觉得这个名字太土,所以在TuneUp Utilities最新版本中取消了中文命名。由于TuneUp Utilities功能强大,使用简单...

    MP3 Player Utilities v3.57

    "MP3 Player Utilities v3.57" 是一个专为这类设备设计的软件工具集,旨在帮助用户进行各种操作和维护,例如固件升级、音乐管理、设备优化等。这个版本3.57可能是该软件的稳定版或改进版,提供了比之前版本更多的...

    Tuneup Utilities 2013 中文版

    TuneUp Utilities 2011 简体中文版,做一次全面优化或者一键优化 一键优化包含注册表纠错清理.注册表碎片整理.删除无效的快捷方式.删除临时文件.优化电脑开关机速度.对磁盘进行碎片整理.让电脑一键修复所有错误,减肥...

    系统优化软件TuneUp Utilities 2011简体中文版注册号

    TuneUp Utilities 2011简体中文版作为一款备受用户喜爱的系统优化软件,提供了全面且深入的优化功能,帮助用户提升计算机性能,解决常见的系统问题。本文将深入探讨TuneUp Utilities 2011的主要功能、使用场景以及...

    TuneUp Utilities 2011简体中文版.zip

    【TuneUp Utilities 2011简体中文版】是一款专为Windows用户设计的系统优化工具,旨在提升计算机性能、清理系统垃圾、改善启动速度和整体稳定性。该软件集成了多种实用功能,包括系统清理、性能提升、磁盘碎片整理、...

    Norton Utilities 8.0 DOS 中文绿色版 英文绿色版

    Norton Utilities 8.0是一款由Symantec公司开发的系统优化和维护工具,它在DOS环境下运行,为用户提供了一系列强大的系统维护功能。这款软件的中文和英文两个版本为用户提供了多语言选择,便于不同语言背景的用户...

    TuneUp Utilities 2012注册码注册机

    全新的TuneUp Utilities™ 2012节能模式可以通过一次单击,将处理器、图形卡、 WiFi适配器和显示器的耗电量降低到最低限度,延长笔记本和上网本电脑的电池寿命。TuneUp Utilities™ 2012比Windows®电源计划能多节省...

    UTIlITIES...

    UTIlITIES UTIlITIES UTIlITIESOK

    Norton Utilities激活码

    《Norton Utilities激活码...总的来说,Norton Utilities 15是一款强大的系统优化工具,通过合理的激活码获取和使用,可以有效提升电脑性能,保障系统稳定。在享受其带来的便利时,也要注意合法合规,避免潜在的风险。

    tuneup utilities 2013注册机

    TuneUp Utilities是一款知名的系统优化与维护软件,主要针对Windows操作系统,提供一系列工具以提升电脑性能、清理无用文件、优化设置以及修复潜在问题。2013版是该系列的一个重要版本,包含了多种实用功能,旨在...

    TuneUp.Utilities.2009

    TuneUp Utilities 2009是一款著名的系统优化软件,专为Windows操作系统设计,旨在提升电脑性能、改善系统稳定性和节省硬盘空间。它集合了多种实用工具,帮助用户轻松管理、调整和维护他们的计算机。 一、主要功能 ...

    Teradata Tools and Utilities

    ### Teradata Tools and Utilities知识点详解 ...综上所述,《Teradata Tools and Utilities》不仅是一本详细的用户手册,更是Teradata数据仓库解决方案的核心组成部分之一,对于理解和使用Teradata工具具有重要意义。

    DameWare NT Utilities 6.8.1.4汉化版

    总之,DameWare NT Utilities 6.8.1.4汉化版是一个强大的远程系统管理工具,其全面的功能和友好的中文界面,使得系统管理员在进行日常维护和故障排查时能更加高效、便捷。无论是企业内部还是IT服务提供商,都将从中...

Global site tag (gtag.js) - Google Analytics