• 将一个浮点数转化为人民币大写字符串


    package com.itwang;
    
    import java.util.Arrays;
    
    /**
     * 浮点数转为人民币
     */
    public class NumberConventor {
        private String[] hanArr = {"零", "壹", "贰", "弎", "肆", "伍", "陆", "柒", "捌", "玖"};
        private String[] unitArr = {"分","角","十", "百", "千","万","亿"};
        /**
         * 把一个浮点数分解成整数部分和小数部分
         *
         * @param num
         * @return
         */
        private String[] divide(double num) {
            //将一个浮点数强制转换为long型,即得到它的整数部分
            long zheng = (long) num;
            //浮点数减去整数得到小数部分,小数部分乘以100后再取整得到2为小数
            long xiaoshu = Math.round((num - zheng) * 100);
            return new String[]{zheng + "", String.valueOf(xiaoshu)};
        }
    
        /**
         * 将后面的两位小数转化为汉字
         * @return
         */
        private String douleToString(String numStr){
            String result = "";
            int numLen = numStr.length();
            if (numStr.charAt(0) == '0' && numLen == 1){
                return "";
            }
            for (int i = 0;i < numLen;i++){
                int num = numStr.charAt(i) - 48;
                result += hanArr[num] + unitArr[1 - i];
            }
            return result;
        }
        /**
         * 把一个四位的数变成汉字字符串
         */
        private String toHanStr(String numStr) {
            String result = "";//存放最终结果
            int numLen = numStr.length();
            //扫描数字串从第一个不为零的地方开始
            int j;
            for (j = 0; j < numLen; j++) {
                if (numStr.charAt(j) != '0') {
                    break;
                }
            }
            //四个全是零
            if (j == numLen) {
                return hanArr[0];
            }
            //不是四个全是零
            //从第一个不等于零的地方依次遍历数字字符串的每一位数字
            for (int i = j; i < numLen; i++) {
                //把char型数字换成int型数字,因为它们的ASCII码值恰好相差48
                //因此把char型数字减去48得到int型数字
                int num = numStr.charAt(i) - 48;
                //如果不是最后一位数字,而且数字不是零,需添加单位(千,百,十)
                if (num != 0 && i != numLen - 1) {
                    result += hanArr[num] + unitArr[numLen - i];
                } else {
                    //否则是最后一位则不添加单位,如果最后一位是零,连续两个零
                    if (i == numLen - 1 && num == 0) {
                        return result;
                    }
                    //判断当前位置如果为零,判断下一个位置如果仍然为零直接跳过这两个零
                    if(i != numLen - 1 && (i + 1) != numLen && (numStr.charAt(i + 1) == '0')){
                        i++;
                    }
                    else {
                        result += hanArr[num];
                    }
                }
            }
            return result;
        }
    
        /**
         * 从四位数字串扩展到12位
         * @param numStr
         */
        private String toRBM(double inputNum){
            String numStr = divide(inputNum)[0];
            String numStr2 = divide(inputNum)[1];
            //换算整数部分
            int numLen = numStr.length();
            int entirePart = numLen / 4;
            int yuPart = numLen % 4;
            String result = "";
            //四位数字或四位数字之内
            if (numLen <= 4){
                result += toHanStr(numStr);
            }
            if (numLen > 4 && numLen <= 8){
                //获取最高位的4位数字串
                String gaowei = numStr.substring(0,numLen - 4);
                //获取最低位的4位数字串
                String disiwei = numStr.substring(numLen - 4);
                result += toHanStr(gaowei) + unitArr[5];
                result += toHanStr(disiwei);
            }
            if (numLen > 8 && numLen <= 12){
                //获取最高位的4位数字串
                String gaowei = numStr.substring(0, numLen - 8);
                //获取中间位的4位数字串
                String midlewei = numStr.substring(numLen - 8, numLen - 4);
                //获取最低位的4位数字串
                String disiwei = numStr.substring(numLen - 4);
                result += toHanStr(gaowei) + unitArr[6];
                result += toHanStr(midlewei) + unitArr[5];
                result += toHanStr(disiwei);
            }
            if (numLen > 12){
                return "输入的长度有误!";
            }
            //换算小数部分
            result += douleToString(numStr2);
            return result;
        }
        public static void main(String[] args) {
            NumberConventor numberConventor = new NumberConventor();
            //numberConventor.divide(2346844.123)[0]
            double inputNum = 123456789354.123;
            System.out.println(numberConventor.toRBM(inputNum));
        }
    }

    运行结果:

  • 相关阅读:
    所谓的小项目
    PHP开发者常犯的10个MySQL错误
    这是掌握cookie最后的一个障碍
    Lua学习笔记(2)——table
    Corona Enterprise 引入第三方 jar 包
    Lua学习笔记(1)
    SQL分页查询笔记
    三两句记录设计模式(1)——简单工厂模式
    Window + Net + Corona + IOS PUSH
    IoC学习
  • 原文地址:https://www.cnblogs.com/ya-qiang/p/9438661.html
Copyright © 2020-2023  润新知