1. 程式人生 > >【java】java處理隨機浮點數(小數點後兩位)用RMB的大寫數值規則輸出

【java】java處理隨機浮點數(小數點後兩位)用RMB的大寫數值規則輸出

pen junit toc get code package 部分 amp print

晚上上床前,拿到這個有意思的問題,就想玩弄一番:

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

規則:【隨機浮點數按照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

效果展示:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

【java】java處理隨機浮點數(小數點後兩位)用RMB的大寫數值規則輸出