博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出
阅读量:6895 次
发布时间:2019-06-27

本文共 3791 字,大约阅读时间需要 12 分钟。

晚上上床前,拿到这个有意思的问题,就想玩弄一番:

============================================================================

规则:【随机浮点数按照RMB读法写出】

总代码如下:

package com.sxd.test;import org.junit.Test;import java.text.DecimalFormat;import java.util.Random;/** * @Author  SXD */public class RandomTest {    @Test    public void createRandom(){        DecimalFormat df = new DecimalFormat("0.00");        Random random = new Random();        double aa = (random.nextDouble())*(random.nextInt(Integer.MAX_VALUE));        System.out.println(df.format(aa));        System.out.println(deal4RMB(df.format(aa)));    }    /**     * 从小数点为分界线,往前迭代处理+往后拼接角分+部分规则     * @param dbNum 随机浮点数值     * @return  转化后的RMB大写数值描述     */    private String deal4RMB(String dbNum){        String sb = "";        try {            int point = dbNum.lastIndexOf(".");            char [] charArr = dbNum.toCharArray();            for (int i = 1; i <= point; i++) {                String flag = getUpperCase(charArr[point-i],i);                sb = flag + sb ;                if("error".equals(flag)){                    return  "转化异常";                }            }            sb = dealString(sb);            sb = sb+"元"+getUpperCase(charArr[point+1],-1)+getUpperCase(charArr[point+2],-2);        }catch (Exception e){            System.out.println(e);            return  "转化异常";        }            return  sb;    }    /**     * 替换中文RMB计数 + 部分规则     * @param a 数值     * @param i 位置     * @return  数值+位置     */    private String getUpperCase(char a,int i){        //本位值为0  并且 本位位置在个位   小数点后一位  小数点后两位        //不做任何返回操作        if('0' == a && (i==1 || i==-1 || i==-2)){            return "";        }        //本位值为0 并且 本位位置在万位        //仅返回 万  而不是几万        if ('0' == a && i==5) {            return "万";        }        //本位数字转化的汉字大写数字        String flag = "";        //本位位置对应 【分 角 个 十 百 千  万  亿】         String flag2 = "";                switch (a){            case '0' : flag = "零";break;            case '1' : flag = "壹";break;            case '2' : flag = "贰";break;            case '3' : flag = "叁";break;            case '4' : flag = "肆";break;            case '5' : flag = "伍";break;            case '6' : flag = "陆";break;            case '7' : flag = "柒";break;            case '8' : flag = "捌";break;            case '9' : flag = "玖";break;            default : flag = "error";        }        //本位为零  不拼接本位位置 【除万位  上方已经单独处理】        if(!"零".equals(flag)){            switch (i){                case -1: flag2 = "角";break;                case -2: flag2 = "分";break;                case 2:                case 6:                case 10: flag2 = "十";break;                case 3:                case 7:                case 11: flag2 = "百";break;                case 4:                case 8: flag2 =  "千";break;                case 5: flag2 = "万";break;                case 9: flag2 = "亿";break;                default: flag2 = "";            }        }                        /**         * 本处处理未完善         *因为随机数 Integer位数达到10位以上的概率很大         *因此处理时仅处理了 壹十贰亿几千几百万 这种情况         *若随机数级别在十万位 依旧会出现  壹十几万几千几百         *若随机数级别在十位   依旧会出现  壹十几点几情况         *          * 若要完全处理,仅需要先判断随机数总位数,而后再判断i的值为第几位再特殊处理即可~~         */        if("壹".equals(flag) && "十".equals(flag2) && i == 10){            return  flag2;        }        //返回 数值+位置        return flag+flag2;    }    /**     * 去除重复零  + 部分规则     * @param rmbStr     * @return     */    private String dealString(String rmbStr){       while(rmbStr.indexOf("零零") >= 0){           rmbStr = rmbStr.replace("零零","零");       }              //判断个位是否依旧为零 若为零  截取字符串即可       char [] arr = rmbStr.toCharArray();       if('零' == arr[arr.length-1]){           rmbStr = rmbStr.substring(0,rmbStr.length()-1);       }       return rmbStr;    }}
View Code

 

效果展示:

 

转载于:https://www.cnblogs.com/sxdcgaq8080/p/7947913.html

你可能感兴趣的文章
游侠原创:vmware下android-x86-4.4-RC1体验
查看>>
OpenMNS--管理网络的绝好工具
查看>>
ORACLE LINUX 6.1安装过程
查看>>
iPhone/Mac Objective-C内存管理原理
查看>>
整理Silverlight资源列表(三)-SL实际运用案例
查看>>
02-BGP选路原则和属性详解--weight
查看>>
7.[数据结构和算法分析笔记]词典 Dictionary
查看>>
CCNP精粹系列之八----帧中继全网拓扑试验配置
查看>>
Lync升级S4B秘籍,So Easy!!!
查看>>
【OneNote Mobile】 如何处理便签内容的格式?
查看>>
《深入理解大数据:大数据处理与编程实践》一一1.3 MapReduce并行计算技术简介...
查看>>
LoadRunner关联的高级应用
查看>>
如何减少返工工作量?
查看>>
《敏捷可执行需求说明 Scrum提炼及实现技术》—— 2.1 界定不可更改的边界
查看>>
关注安防行业 聚焦公共安防系统
查看>>
Android代码(Handler的运用),HttpURLConnection的应用,将url图片地址转换成图片。...
查看>>
MySQL锁系列(七)之 锁算法详解
查看>>
编程语言:变革创业思维的工具
查看>>
第一个libgdx程序--仿别踩白块
查看>>
一个开源项目维护者的笔记 — 为什么我关闭 PRs
查看>>