Java實現人民幣大寫程式碼解析
想要實現人民幣大寫,在發票等場景中使用?? 1234.56顯示為:壹仟貳佰叄拾肆元伍角陸分,那就往下看看吧!
本程式可以實現 0 到 9999 9999 9999.994 以內的人民幣大寫轉換,精確到分
經典測試資料:
0
希望轉換出來的結果為:
零元零角零分
1234
希望轉換出來的結果為:
壹仟貳佰叄拾肆元零角零分
9999
希望轉換出來的結果為:
玖仟玖佰玖拾玖元零角零分
1234.5
希望轉換出來的結果為:
壹仟貳佰叄拾肆元伍角零分
1234.9
希望轉換出來的結果為:
壹仟貳佰叄拾肆元玖角零分
1234.56
希望轉換出來的結果為:
壹仟貳佰叄拾肆元伍角陸分
1234.99
希望轉換出來的結果為:
壹仟貳佰叄拾肆元玖角玖分
1234.994
希望轉換出來的結果為:
壹仟貳佰叄拾肆元玖角玖分
1234.999
希望轉換出來的結果為:
壹仟貳佰叄拾伍元零角零分
999999999999.999
希望轉換出來的結果為:
資料過大,無法進行轉換,請重新輸入!
程式原始碼如下,含註釋:
package com.tfj.algorithm; import java.util.Scanner; public class RenMingBi { private boolean zero; String[] strHan = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖" }; String[] moneyCount = { "", "拾", "佰", "仟" }; RenMingBi() { zero = false; } private String[] divide(double digitalRmbValue) { // 處理整數 long intPart = (long) (digitalRmbValue); // 處理小數,把小數轉換成整數形式處理,並進行四捨五入,此時小數四捨五入之後為100的應該另外加一層處理 long decimalPart = Math .round((double) Math.round((digitalRmbValue - intPart) * 10000) / 100); // System.out.println("整數部分為:" + intPart + "小數部分為:" + (digitalRmbValue - intPart)); if (decimalPart == 100) { intPart += 1; } // System.out.println("四捨五入之後整數部分為:" + intPart + "小數部分為:" + decimalPart); String strIntPart = ""; if (intPart == 0) strIntPart = "0"; else { strIntPart = "" + intPart; } String strDecimalPart = ""; if (decimalPart < 10 && decimalPart >= 0) strDecimalPart = "0" + decimalPart; else { strDecimalPart = "" + decimalPart; } // 處理輸入為0的時候 if (intPart == 0 && decimalPart == 0) { zero = true; } // System.out.println("準換為String後,整數部分為:" + strIntPart + "小數部分為:" + strDecimalPart); return new String[] { strIntPart, strDecimalPart }; } // 用來轉換小數部分 private String transDecimal(String str) { if (str.equals("100") || str.equals("00")) { return "零角零分"; } else { String strResult; char[] strRmb = new char[20]; strRmb = str.toCharArray(); if (strRmb[0] == '0' && strRmb[1] == '0') { strResult = ""; } else { int dm = strRmb[0] - '0'; int dn = strRmb[1] - '0'; strResult = strHan[dm] + "角" + strHan[dn] + "分"; } return strResult; } } // 用來轉換整數部分 private String transInt(String str) { char[] firstFourBitRmb = new char[20]; firstFourBitRmb = str.toCharArray(); int len = firstFourBitRmb.length; String strResult = ""; for (int i = 0; i < len; i++) { /** * 這裡開啟之後會顯示成通俗易懂的格式,例如1001,會轉化為:壹仟零壹元,而不是:壹仟零佰零拾壹元, 但我希望得到的是後面這種,因為發票所需顯示的就是後面這種 **/ // if (firstFourBitRmb[i] == '0' && i < len) { // boolean zeroFlag = false; // while (i < len && firstFourBitRmb[i] == '0') { // zeroFlag = true; // i++; // } // if (i != len && zeroFlag == true) // strResult += "零"; // i--; // } else { // int m = firstFourBitRmb[i] - '0'; // strResult += strHan[m] + moneyCount[len - i - 1]; // } int m = firstFourBitRmb[i] - '0'; strResult += strHan[m] + moneyCount[len - i - 1]; } return strResult; } public String transComb() { String[] strTempRmb = new String[2]; double strValue = 0D; Scanner sc = new Scanner(System.in); System.out.println("請輸入具體金額,結果會精確到分:"); strValue = sc.nextDouble(); RenMingBi nr = new RenMingBi(); strTempRmb = nr.divide(strValue); // 轉換小數部分 String result1 = nr.transDecimal(strTempRmb[1]); // 轉換整數部分 String result2 = ""; int len = strTempRmb[0].length(); if (len > 12) return "資料過大,無法進行轉換,請重新輸入!"; else { if (len >= 9) { String strBit1 = strTempRmb[0].substring(0, len - 8); String strBit2 = strTempRmb[0].substring(len - 8, len - 4); String strBit3 = strTempRmb[0].substring(len - 4, len); String strResult1 = nr.transInt(strBit1) + "億"; String strResult2 = nr.transInt(strBit2) + "萬"; String strResult3 = nr.transInt(strBit3) + "元"; result2 = strResult1 + strResult2 + strResult3; } else if (len >= 5) { String strBit1 = strTempRmb[0].substring(0, len - 4); String strBit2 = strTempRmb[0].substring(len - 4, len); String strResult1 = nr.transInt(strBit1) + "萬"; String strResult2 = nr.transInt(strBit2) + "元"; result2 = strResult1 + strResult2; } else if (len >= 1) { if (nr.zero == true) { result2 = "零元"; } else result2 = nr.transInt(strTempRmb[0]) + "元"; } return result2 + result1; } } public static void main(String[] args) { RenMingBi rmb = new RenMingBi(); while (true) { System.out.println(rmb.transComb()); } } }
相關文章
- pb實現列印中人民幣大寫 (轉)
- java 人民幣大寫顯示Java
- javascript 人民幣小寫轉換為大寫形式程式碼例項JavaScript
- ASP.NET 實現人民幣大寫轉換函式ASP.NET函式
- Notes中人民幣大寫換算的實現 (轉)
- 十大經典排序演算法動畫解析和 Java 程式碼實現排序演算法動畫Java
- JAVA實現編寫平臺程式碼生成器Java
- 人民幣小寫轉換為大寫
- Python 大資料量文字檔案高效解析方案程式碼實現Python大資料
- Vue+Java+Base64實現條碼解析VueJava
- Java及Jquery獲取螢幕解析度的實現程式碼JavajQuery
- 人民幣大寫線上轉換工具
- 生產消費實現-寫程式碼
- java 橋接模式實現程式碼Java橋接模式
- [程式設計]Java實現解析抖音無水印影片程式設計Java
- 兩行程式碼輕鬆讓 Java 實現大文字平行計算行程Java
- 十大排序演算法全面解析 - Java實現排序演算法Java
- 十大排序演算法全面解析-Java實現排序演算法Java
- js實現的將金錢轉換為大寫形式程式碼例項JS
- Java集合類,從原始碼解析底層實現原理Java原始碼
- 隨機快速排序Java程式碼實現隨機排序Java
- 雜湊表的程式碼實現(Java)Java
- Java程式碼實現下載檔案Java
- 使用pegjs解析java程式碼JSJava
- 程式碼實現(機器學習識別手寫數字)機器學習
- 求職之手寫程式碼-手寫原始碼大雜燴求職原始碼
- 編寫高效能 Java 程式碼的最佳實踐Java
- 幾道JS程式碼手寫題以及一些程式碼實現JS
- 無需編寫程式碼,API業務流程測試,零程式碼實現API
- MyCat分片:水平拆分例項解析和程式碼實現!
- jquery實現的解析xml檔案程式碼例項jQueryXML
- java實現人機猜拳遊戲的程式碼Java遊戲
- [譯] 用 Java 程式碼實現區塊鏈Java區塊鏈
- 精確統計程式碼量(Java實現)Java
- Java實現SSH模式加密原理及程式碼Java模式加密
- 音樂格式轉換:java程式碼實現Java
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java