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

packagecom.sxd.test;importorg.junit.Test;importjava.text.DecimalFormat;importjava.util.Random;/*** @Author SXD*/

public classRandomTest {

@Testpublic voidcreateRandom(){

DecimalFormat df= new DecimalFormat("0.00");

Random random= newRandom();double aa = (random.nextDouble())*(random.nextInt(Integer.MAX_VALUE));

System.out.println(df.format(aa));

System.out.println(deal4RMB(df.format(aa)));

}/*** 从小数点为分界线,往前迭代处理+往后拼接角分+部分规则

*@paramdbNum 随机浮点数值

*@return转化后的RMB大写数值描述*/

privateString 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 "转化异常";

}returnsb;

}/*** 替换中文RMB计数 + 部分规则

*@parama 数值

*@parami 位置

*@return数值+位置*/

private String getUpperCase(char a,inti){//本位值为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){returnflag2;

}//返回 数值+位置

return flag+flag2;

}/*** 去除重复零 + 部分规则

*@paramrmbStr

*@return

*/

privateString 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);

}returnrmbStr;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值