【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;
    }

}

效果展示:

时间: 2024-08-28 05:10:16

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

Java中double类型的数据精确到小数点后两位

Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 二: new java.text.DecimalFormat("#.00").format(3.1415926) 三: double d = 3.1415926

Java中取小数点后两位(四种方法)

摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧     java.text.DecimalFormat   df=new   java.text.DecimalFormat("#.##");     double   d=3.14159;     System.out.println(df.format(d)); 二 java.math.BigDecimal     B

java 取小数点后两位 不四舍五入,怎么做

java 取小数点后两位 不四舍五入,怎么做 正常版: //正常版: import java.text.DecimalFormat; import java.math.RoundingMode; DecimalFormat formater = new DecimalFormat(); formater.setMaximumFractionDigits(2); formater.setGroupingSize(0); formater.setRoundingMode(RoundingMode.F

JAVA除法保留小数点后两位的两种方法 Java Math的 floor,round和ceil的总结

floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11. ceil 则是不小于他的最小整数 看例子   Math.floor Math.round Math.ceil 1.4 1 1 2 1.5 1 2 2 1.6 1 2 2 -1.4 -2 -1

mysql格式化小数保留小数点后两位(小数点格式化)

格式化浮点数的问题,用format(col,2)保留两位小数点,出现一个问题,例如下面的语句,后面我们给出解决方法 SELECT FORMAT(12562.6655,2); 结果:12,562.67 查看文档:Formats the number X to a format like '#,###,###.##', rounded to D decimal places, and returns the result as a string. If D is 0, the result has

js如何实现数字保留小数点后两位小数

js如何实现数字保留小数点后两位小数:小数点后保留两位小数是比较常见的形式,由于比较简单,下面直接给出例子.代码如下: var num=3.1415926; console.log(num.toFixed(2)); toFixed()函数可以参阅javascript的Number对象的toFixed()方法一章节. 原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=9567 更多内容可以参阅:http://www.softwhy.

控制input标签中只能输入数字以及小数点后两位

js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { obj.value = ""; } if (obj != null) { //检查小数点后是否对于两位http://blog.csdn.net/shanzhizi if (obj.value.toString().split(".").length > 1 &a

限制输入,输入金额 和保留小数点后两位

//判断是否是浮点类型 + (BOOL)isPureFloat:(NSString*)string { NSScanner* scan = [NSScanner scannerWithString:string]; float val; return [scan scanFloat:&val] && [scan isAtEnd];} //在textFiled中限制输入位数 if ([string isEqualToString:@""]) { return YE

用Javascript取float型小数点后两位,例22.127456取成22.13,如何做?

1. 最笨的办法....... [我就怎么干的.........] 1function get()2{3    var s = 22.127456 + "";4    var str = s.substring(0,s.indexOf(".") + 3);5    alert(str);6} 2. 正则表达式效果不错 1<script type="text/javascript">2onload = function(){3    v