`

人民币大小写转换工具类

阅读更多
package com.test.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public final class ChangeRMB {

    // 每个数字对应的大写
    private static final String[] num = { "零", "壹", "贰", "叁", "肆", "伍", "陆",
        "柒", "捌", "玖", };

    // 从低到高排列的单位
    private static final String[] bit = { "圆", "拾", "佰", "仟", "万", "拾", "佰",
        "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" };

    // 金额里面的角和分
    private static final String[] jf = { "角", "分" };

    /**
     * 处理金额的整数部分,返回"...圆整"
     *
     * @param integer
     * @return String
     * @throws Exception
     */
    public static String praseUpcaseRMB(String integer) throws Exception {
    StringBuilder sbdr = new StringBuilder("");
    int j = integer.length();
    if (j > bit.length) {
        throw new Exception("\n只能处理亿万亿以内的数据(含亿万亿)!");
    }
    char[] rmb = integer.toCharArray();
    for (int i = 0; i < rmb.length; i++) {
        int numLocate = Integer.parseInt("" + rmb[i]); // 大写数字位置
        int bitLocate = j - 1 - i; // 数字单位的位置
        /*
         * 连续大写零只添加一个
         */
        if (numLocate == 0) {
        if (!sbdr.toString().endsWith(num[0])) {
            sbdr.append(num[numLocate]);
        }
        continue;
        }
        /*
         * 下面的if语句保证 10065004583.05-->壹佰亿陆仟伍佰万肆仟伍佰捌拾叁圆零伍分
         */
        if (bit[bitLocate].equals("仟")) {
        String s = sbdr.toString();
        if (!s.endsWith(bit[bitLocate + 1]) && s.length() > 0) {
            if (s.endsWith(num[0])) {
            sbdr.deleteCharAt(sbdr.length() - 1);
            }
            sbdr.append(bit[bitLocate + 1]);
        }
        }
        sbdr.append(num[numLocate]);
        sbdr.append(bit[bitLocate]);
    }// end for
    /*
     * 去掉结尾"零"后,补全
     */
    if (sbdr.toString().endsWith(num[0])) {
        sbdr.deleteCharAt(sbdr.length() - 1);
        sbdr.append("圆整");
    } else {
        sbdr.append("整");
    }
    return sbdr.toString();
    }

    /**
     * 处理带小数的金额,整数部分交由上一个方法处理,小数部分自己处理
     *
     * @param integer
     * @param decimal
     * @return String
     * @throws Exception
     */
    public static String praseUpcaseRMB(String integer, String decimal)
        throws Exception {
    String ret = ChangeRMB.praseUpcaseRMB(integer);
    ret = ret.split("整")[0]; // 处理整数部分
    StringBuilder sbdr = new StringBuilder("");
    sbdr.append(ret);
    char[] rmbjf = decimal.toCharArray();
    for (int i = 0; i < rmbjf.length; i++) {
        int locate = Integer.parseInt("" + rmbjf[i]);
        if (locate == 0) {
        if (!sbdr.toString().endsWith(num[0])) {
            sbdr.append(num[locate]);
        }
        continue;
        }
        sbdr.append(num[locate]);
        sbdr.append(jf[i]);
    }
    return sbdr.toString();
    }

    /**
     * 将double形式的字符串(有两位小数或无小数)转换成人民币的大写格式
     *
     * @param doubleStr
     * @return String
     * @throws Exception
     */
    public static String doChangeRMB(String doubleStr) throws Exception {
    String result = null;
    if (doubleStr.contains(".")) { // 金额带小数
        int dotloc = doubleStr.indexOf(".");
        int strlen = doubleStr.length();
        String integer = doubleStr.substring(0, dotloc);
        String decimal = doubleStr.substring(dotloc + 1, strlen);
        result = ChangeRMB.praseUpcaseRMB(integer, decimal);
    } else { // 金额是整数
        String integer = doubleStr;
        result = ChangeRMB.praseUpcaseRMB(integer);
    }
    return result;
    }

    /**
     * 将double数值(有两位小数或无小数)转换成人民币的大写格式
     *
     * @param rmbDouble
     * @return String
     * @throws Exception
     */
    public static String doChangeRMB(double rmbDouble) throws Exception {
    String result = null;
    double theInt = Math.rint(rmbDouble);
    if (theInt > rmbDouble) {
        theInt -= 1;
    }
    double theDecimal = rmbDouble - theInt;
    String integer = new Long((long) theInt).toString();
    String decimal = "" + Math.round(theDecimal * 100);
    if (decimal.equals("0")) {
        result = ChangeRMB.praseUpcaseRMB(integer);
    } else {
        result = ChangeRMB.praseUpcaseRMB(integer, decimal);
    }
    return result;
    }

    public static void main(String[] args) throws Exception {
    System.out.print("输入小写人民币金额:");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String in = br.readLine();
    String result = ChangeRMB.doChangeRMB(in);
    System.out.println("\n" + "------------转换结果------------");
    System.out.println(result);
    double d = 54628569856.68;
    String ret = ChangeRMB.doChangeRMB(d);
    System.out.println("\n" + "------------转换结果------------");
    System.out.println(ret);
    }
}

 

 

分享到:
评论

相关推荐

    字母大小写转换工具和人民币大小写转换工具

    字母大小写转换工具和人民币大小写转换工具,字母大小写转换工具和人民币大小写转换工具,字母大小写转换工具和人民币大小写转换工具。

    VB.NET编写的人民币大小写转换工具

    VB.NET编写的人民币大小写转换工具,实现小写转大写,大写转小写。

    vb 人民币大小写转换 代码

    vb 中 将数字转换人民币大写 源代码 如:10.00 转换 十元整

    人民币大小写转换

    Java中关于金额小写转换为大写的工具类

    人民币大小写转换 人民币大写转换工具 v1.0

    人民币大写转换器是很方便的人民币大小写转换工具。

    rmb.rar_人民币_人民币大小写转换_账单

    人民币大小写转换工具(例:111.11 =&gt; 壹佰壹拾壹圆壹角壹分)

    C#winForm人民币大小写转换器

    适用于新手查看使用的工具,代码简单规范,适合新手学习使用。

    人民币大小写工具.zip

    人民币金额(数字)大小写转换 工具 人民币大写转换器( 将阿拉伯数字转换成中文大写、人民币大写转换工具) 输入小写数字金额: 显示中文大写金额: 数字转换大写工具

    C++人民币大写转换工具,注释详细

    对于输入的数字可以转换成人民币大写,关于读零参照下面的约定 整数部分里的零读出或不读的情况有以下几种: 1、不读出的情况: 零在每级的结尾时这里的一级是指每四位,个位到千位是一级, 万位到亿位是一级,...

    中文金额大小写转换工具

    一款人民币中文大写金额和数字小写相互转换的小工具,可实现10的23次方以内的数字转换。

    文件名打小写一键转换工具解压即用

    字母大小写转换工具和人民币大小写转换工具,

    大小写金额转换-源码

    如¥1,680.32,应写成 人民币壹仟陆佰捌拾元零叁角贰分,或者写成人民币壹仟陆佰捌拾元 叁角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元零伍角 叁分,或者写成人民币壹拾万零柒仟元伍角叁分。 (四)...

    python人民币小写转大写辅助工具

    本文实例为大家分享了python人民币大小写转换的具体代码,供大家参考,具体内容如下 大家应该都知道,银行打印账单有时候会跟上人民币的阿拉伯数字以及人民币汉字大写写法,转换的过程中有一定的逻辑难度,较为麻烦...

    Excel新增工具集

    2、人民币大小写等常用数据转换:可将人民币小写转换成大写、能四舍五入四舍五入、甩去零头取整、提取甩去的零头、工资纳税计算、分数或名次转等次、汉字转拼音、英语单词首字母转大写等。由于采用在单元格输入公式...

    smartBleConnect.zip

    微信小程序 由梦辛工作室 梦辛灵开发 蓝牙调试助手源码 拥有以下功能 蓝牙调试 广播数据 选择读写uuid 定时发送 人民币大小写转换 进制转换 MD5加密工具等功能

    CommonUtilsLibrary:常用工具类库合集

    数字大写小转行,用于人民币大小写转换 安全偏选项存储 SharePreference帮助类 存储工具类 字符串工具类 系统信息帮助类 Toast帮助类 Android Studio快速集成 dependencies { compile '...

    excel工具箱

    适用于excel2003及2007;...5.文本数字互转,大小写转换 6.sql查询汇总 7.字符过滤,自定义函数,人民币大写 8.文本加密解密,vba加锁解锁,单元格保护解除 9.有列字段转无列字段 10.合并单元格内容

    chrome开发工具箱插件

    二维码生成,网页抓取,MD5加密(16位、32位),UrlEncode/UrlDecode,Base64Encode/Base64Decode,CSS/JS/Html代码美化、压缩,人民币大小写转换,简体繁体转换,ASCII码转换,颜色选择器,EsCape/UnEscape,8、10...

Global site tag (gtag.js) - Google Analytics