• 金额转大写


    package web;

    import java.util.HashMap;

    /**
    * 数字金额转换成中文大写金额
    */
    public class MoneyToUpper {

    /**
    * 人民币大写单位制
    */
    private static HashMap<Integer, String> dws;

    /**
    * 数字对应的中文
    */
    private static String[] jes;

    // 初始化执行
    static {
    dws = new HashMap<Integer, String>();
    dws.put(-2, "分");
    dws.put(-1, "角");
    dws.put(0, "元");
    dws.put(1, "拾");
    dws.put(2, "佰");
    dws.put(3, "仟");
    dws.put(4, "万");//
    dws.put(5, "拾");
    dws.put(6, "佰");
    dws.put(7, "仟");
    dws.put(8, "亿");//
    dws.put(9, "拾");
    dws.put(10, "佰");
    dws.put(11, "仟");
    dws.put(12, "万");
    jes = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
    }

    /**
    * 数字转换人民币大写
    *
    * @param number
    * 数字 不支持科学数字
    * @return
    */
    public static String chinese(String number) {
    StringBuffer su = new StringBuffer();
    // 整数部分
    number = delInvalidZero(number);
    String str = null;
    // 小数部分
    String decimal = null;

    if (number.contains(".")) {
    // 截取整数位
    str = number.split("\.")[0];
    decimal = number.split("\.")[1];
    } else {
    str = number;
    }
    // 判断是否存在整数位
    if (str.length() > 0) {
    for (int i = 0; i < str.length(); i++) {
    String context = str.substring(i, i + 1);
    int pow = str.length() - i - 1;
    Integer val = Integer.parseInt(context.toString());
    // 获取中文单位
    String sign = dws.get(pow);
    // 获取中文数字
    String name = jes[Integer.parseInt(context)];
    if (val == 0) {
    if (pow % 4 != 0) {// 删除单位
    sign = "";
    }
    if (i < str.length() - 1) {
    Integer val1 = Integer.parseInt(str.substring(i + 1, i + 2));
    if (val == 0 && val == val1) {
    name = "";
    }
    } else if (i == str.length() - 1) {
    name = "";
    }
    }
    su.append(name + sign);
    }
    }
    // 判断是否存在小数位
    if (decimal != null) {
    str = decimal.substring(0, 1);
    if (!"0".equals(str)) {
    su.append(jes[Integer.parseInt(str)] + dws.get(-1));
    }
    if (decimal.length() == 2) {
    str = decimal.substring(1, 2);
    if (!"0".equals(str)) {
    su.append(jes[Integer.parseInt(str)] + dws.get(-2));
    }
    }
    } else {
    su.append("整");
    }
    return su.toString();
    }

    /**
    * 清理数字特殊字符
    *
    * @param str
    * @return
    */
    private static String delInvalidZero(String str) {
    if ("0".equals(str.substring(0, 1))) {
    return delInvalidZero(str.substring(1, str.length()));
    } else if (str.contains(",")) {
    return delInvalidZero(str.replaceAll(",", ""));
    } else {
    return str;
    }
    }

    public static void main(String[] args) {
    System.out.println(MoneyToUpper.chinese("123456.78"));
    }
    }

  • 相关阅读:
    Windows Server 2008 R2系统上安装SQLServer2012集群(简略)
    播放视频有沙沙的杂音怎么处理?
    合并两个表取数
    电脑下边的语言栏跑到左边了怎么办?
    一条SQL查出当月的每一天
    统一本地服务器名和计算机名
    一个奇葩的SQL
    Cent Os7.0安装MongoDB4.2.0
    MySQL 8.0.5开启远程连接
    MySQL系统函数及SQL开发中易犯错的点
  • 原文地址:https://www.cnblogs.com/ngy0217/p/9952459.html
Copyright © 2020-2023  润新知