财务数字转换--大小写转换

简介: package com.kerbores.utils.common;import java.util.HashMap;import java.util.Map;/** * 财务数字转换 * */public class FinanceUtils { ...
package com.kerbores.utils.common;

import java.util.HashMap;
import java.util.Map;

/**
 * 财务数字转换
 * 
 */
public class FinanceUtils {

    /***
     * 切割字符串
     * 
     * @param sb
     */
    public static void m0(String sb, int type, StringBuffer sbf) {

        int len = sb.length();
        int b = 0;
        type++;
        if (len >= 4) {
            b = len - 4;
            sbf.insert(0, m1(sb.substring(b), type));
            m0(sb.substring(0, b), type, sbf);
        } else if (len > 0)
            sbf.insert(0, m1(sb, type));
        if ('零' == sbf.charAt(0))
            sbf.deleteCharAt(0);
    }

    /***
     * 
     * 
     * @param sb
     *            大写金额
     */
    public static StringBuffer m1(String sb, int type) {

        StringBuffer sbf = new StringBuffer(sb);
        switch (type) {
        case 1:
            sbf.append("圆");
            break;
        case 2:
            sbf.append("万");
            break;
        case 3:
            sbf.append("亿");
            break;
        default:
            break;
        }
        // 开始赋值
        int b = 0;
        char t = 0;
        for (int i = sbf.length() - 2; i >= 0; i--) {
            t = sbf.charAt(i);
            sbf.setCharAt(i, map.get(t));
            if (i != 0)
                sbf.insert(i, mode[b]);
            b++;
        }
        for (int i = 0; i < sbf.length(); i++) {
            t = sbf.charAt(i);
            if (t == '零') {
                t = sbf.charAt(i + 1);
                if ('圆' != t && '万' != t && '亿' != t)
                    sbf.deleteCharAt(i + 1);
                else
                    sbf.deleteCharAt(i);
                if (i != 0)
                    if (sbf.charAt(i - 1) == '零') {
                        sbf.deleteCharAt(i - 1);
                        i--;
                    }
            }
        }
        if (sbf.length() == 1) {
            if ('圆' != sbf.charAt(0))
                sbf.setLength(0);
        }
        return sbf;
    }

    public static StringBuffer m2(String de) {

        if (de.length() > 2)
            de = de.substring(0, 2);
        de = de.replaceFirst("00", "");
        StringBuffer sb = new StringBuffer(de);
        if (sb.length() > 0) {
            if (sb.charAt(sb.length() - 1) == '0')
                sb.deleteCharAt(sb.length() - 1);
            sb.setCharAt(0, map.get(sb.charAt(0)));
            switch (sb.length()) {
            case 1:
                sb.append("角");
                break;
            case 2:
                sb.setCharAt(1, map.get(sb.charAt(1)));
                if (sb.charAt(0) != '零')
                    sb.insert(1, '角');
                sb.append("分");
                break;
            default:
                break;
            }
        }
        return sb;
    }

    /**
     * 将字符串表示的金额转换成大写金额
     * 
     * @param in
     *            输入金额 字符串形式 如 12345.67
     * @return 大写金额 如 壹佰贰拾叁万肆仟伍佰陆拾陆圆贰角贰分 整
     */
    public static String toChar(String in) {

        StringBuffer sbf = new StringBuffer();
        String[] sp = in.split("\\.");
        if (sp.length == 2) {
            m0(sp[0], 0, sbf);
            sbf.append(m2(sp[1]));
        } else
            m0(in, 0, sbf);
        sbf.append(" 整");
        return sbf.toString();
    }

    // 缓存所有数字的
    private static Map<Character, Character> map = new HashMap<Character, Character>(10);

    static {
        map.put('1', '壹');
        map.put('2', '贰');
        map.put('3', '叁');
        map.put('4', '肆');
        map.put('5', '伍');
        map.put('6', '陆');
        map.put('7', '柒');
        map.put('8', '捌');
        map.put('9', '玖');
        map.put('0', '零');
    }

    static char[] mode = new char[] { '拾', '佰', '仟' };

}
相关文章
|
3月前
|
人工智能
将两个数字用字符串输入,因为b它字符都一样,
将两个数字用字符串输入,因为b它字符都一样,
|
3月前
|
数据安全/隐私保护
RegExp——密码复杂度为数字,小写字母,大写字母,特殊符号 至少包含三种,长度为 8 - 16位
RegExp——密码复杂度为数字,小写字母,大写字母,特殊符号 至少包含三种,长度为 8 - 16位
79 0
|
数据安全/隐私保护
正则表达式--密码复杂度验证--必须包含大写、小写、数字、特殊字符中的至少三项
正则表达式--密码复杂度验证--必须包含大写、小写、数字、特殊字符中的至少三项
840 0
|
4月前
|
JavaScript C++
js【详解】比较(数字与数字比较、数字与字符串比较、字符串与字符串比较、字符串与非数字比较……)
js【详解】比较(数字与数字比较、数字与字符串比较、字符串与字符串比较、字符串与非数字比较……)
66 0
从键盘录入一个字符串,统计该串中有大写字母、小写字母、数字各有多少个。比如:Hello12345World大写:2个 小写:8个数字:5个。
从键盘录入一个字符串,统计该串中有大写字母、小写字母、数字各有多少个。比如:Hello12345World大写:2个 小写:8个数字:5个。
263 0
字符串转换为大小写转换并且判断是否全为大小写
字符串转换为大小写转换并且判断是否全为大小写
字符串转换为大小写转换并且判断是否全为大小写
判断字符串首个字母是否大写,若大写,则输出该字符串中大写字母的个数 并打印。
判断字符串首个字母是否大写,若大写,则输出该字符串中大写字母的个数 并打印。
160 0
|
C++
【C++操作手册】将字符串转化为数字、数字转化为字符串、字符转化为数字、数字转化为字符
【C++操作手册】将字符串转化为数字、数字转化为字符串、字符转化为数字、数字转化为字符
114 0
|
JavaScript 前端开发
Javascript之为数字添加货币(千位分隔符)格式同时保留小数点后两位
Javascript之为数字添加货币(千位分隔符)格式同时保留小数点后两位
263 0
Javascript之为数字添加货币(千位分隔符)格式同时保留小数点后两位
7-8 字符串字母大小写转换 (15 分)
7-8 字符串字母大小写转换 (15 分)
305 0