【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出

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

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

规则:【随机浮点数按照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

 

效果展示:

 

时间: 2024-11-05 18:43:17

【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出的相关文章

java中double类型变量保留小数点后两位的问题

代码为 double rate1 = 0.290625; //四舍五入保留两位小数 BigDecimal df = new BigDecimal(rate1); double rate2 = df.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); //rate2打印结果为0.29 import java.text.*; DecimalFormat df=new DecimalFormat(".##");double d=1252.

保留小数点位数-double保留小数点后两位的问题,跪求大神详解

问题描述 double保留小数点后两位的问题,跪求大神详解 图片下边为对应的后台代码. 图片中的合计怎么 小数点后边那么多位?求大神详解. private double heji1=0; private double heji2=0; private double heji3=0; private double heji4=0; public String get() throws Exception { this.init(); ruKu = dao.get(id); return SUCCE

JavaScript 获取任一float型小数点后两位的小数_javascript技巧

用Javascript取float型小数点后两位,例22.127456取成22.13,如何做? 1.这种方法最不推荐: function get(){ var s = 22.127456 + ""; var str = s.substring(0,s.indexOf(".") + 3); alert(str); } 2. 使用正则表达式获取: function get(){ var a = "23.456322"; var aNew; var r

double 类型保留小数点后两位,求大神指导

问题描述 double 类型保留小数点后两位,求大神指导 图片下边为对应的后台代码. 图片中的合计怎么 小数点后边那么多位?求大神详解. private double heji1=0; private double heji2=0; private double heji3=0; private double heji4=0; public String get() throws Exception { this.init(); ruKu = dao.get(id); return SUCCES

excel怎么快捷地将所有数据保留小数点后两位?

  excel怎么快捷地将所有数据保留小数点后两位?在大数据时代,数据需要被系统,快捷地被分类和计算,那么在excel中怎样才能快捷地将所有数据保留两位小数,今天小编来给大家分享一下. 步骤 这是小编随意输入的原始数据,可以看到有数据有小数点后三位,有的有一位小数,有的没有小数.总之数据很参差不齐. 选中需要保留两位小数的数据后,单击"开始"选项卡下面的"数字组"中的对话框启动器(数字组右下角),弹出"设置单元格格式"对话框. 在"数字

android-要求只显示小数点后两位

问题描述 要求只显示小数点后两位 得到GTotal的值,举例: 179.257856 但是要求只显示小数点后两位,也就是这样: 179.25 @Override protected void onResume() { super.onResume(); if (Constants.mItem_Detail.size() == 0) { return; } Double mGTotal = Double.parseDouble(Constants.mItem_Detail.get(0).get(S

调整小数的格式保留小数点后两位_javascript技巧

在开发过程中经常遇到要调整小数的格式,如保留小数点后两位等等.方法也颇为常见,备忘如下. 第一种,利用math.round var original=28.453 1) //round "original" to two decimals var result=Math.round(original*100)/100; //returns 28.45 2) // round "original" to 1 decimal var result=Math.round(

Java如何取double小数点后两位(四舍五入)

问题描述 如题,有方法的最好先测试一下.DecimalFormatdf=newDecimalFormat("#.00");用这个方法不行,有兴趣的可以测试一下这个数字:doublex=25470.085;用Math.round也不行,因为Math.round(-11.5)=-11而不是-12(当然此处可以自己封装一个方法,判断正负,但是希望能有更简单的方法) 解决方案 解决方案二:doublea=12.34564;doubleb=Math.round(a*100);System.out

正负小数点后两位浮点数实现原理及代码_jquery

背景:项目中需要做个对两位小数点的正负浮点数的处理, 要求:非数字或者.字符自动清除,并对.12自动修补.前的0 原理:在输入框中加入两个事件,keyup与blur,keyup处理字符串中非要求的字符,blur中对最终字符串处理成理想的格式111.11 实现:通过七个正则处理掉主功能 val代表输入的字符串 /^\d*\.?\d{0,2}$/ 验证val是否是ddd.dd的格式,是则不处理,否才处理 /[^.0-9]+/ 处理掉val中所有的非数字与.的字符 /(?:\d*\.\d{0,2}|\