金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:(¥1011)-(一千零一拾一元整)輸出。...

程序代碼如下:

package cn.itcast.framework.interview;import java.text.NumberFormat;
import java.util.HashMap;//金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:(¥1011)->(一千零一拾一元整)輸出。
public class SimpleMoneyFormat {public static final String EMPTY = "";public static final String ZERO = "零";public static final String ONE = "壹";public static final String TWO = "貳";public static final String THREE = "叁";public static final String FOUR = "肆";public static final String FIVE = "伍";public static final String SIX = "陸";public static final String SEVEN = "柒";public static final String EIGHT = "捌";public static final String NINE = "玖";public static final String TEN = "拾";public static final String HUNDRED = "佰";public static final String THOUSAND = "仟";public static final String TEN_THOUSAND = "萬";public static final String HUNDRED_MILLION = "億";public static final String YUAN = "元";public static final String JIAO = "角";public static final String FEN = "分";public static final String DOT = ".";private static SimpleMoneyFormat formatter = null;private HashMap chineseNumberMap = new HashMap();private HashMap chineseMoneyPattern = new HashMap();private NumberFormat numberFormat = NumberFormat.getInstance();private SimpleMoneyFormat(){numberFormat.setMaximumFractionDigits(4);numberFormat.setMinimumFractionDigits(2);numberFormat.setGroupingUsed(false);chineseNumberMap.put("0", ZERO);chineseNumberMap.put("1", ONE);chineseNumberMap.put("2", TWO);chineseMoneyPattern.put("3", THREE);chineseMoneyPattern.put("4", FOUR);chineseNumberMap.put("5", FIVE);chineseNumberMap.put("6", SIX);chineseNumberMap.put("7", SEVEN);chineseNumberMap.put("8", EIGHT);chineseNumberMap.put("9", NINE);chineseNumberMap.put(DOT, DOT);chineseMoneyPattern.put("1", TEN);chineseMoneyPattern.put("2", HUNDRED);chineseMoneyPattern.put("3", THOUSAND);chineseMoneyPattern.put("4", TEN_THOUSAND);chineseMoneyPattern.put("5", TEN);chineseMoneyPattern.put("6", HUNDRED);chineseMoneyPattern.put("7", THOUSAND);chineseMoneyPattern.put("8", HUNDRED_MILLION);}public static SimpleMoneyFormat getInstance(){if(formatter == null){formatter = new SimpleMoneyFormat();}return formatter;}public String format(String moneyStr){checkPrecision(moneyStr);String result;result = convertToChineseNumber(moneyStr);result = addUnitsToChineseMoneyString(result);return result;}public String format(double moneyDouble){return format(numberFormat.format(moneyDouble));}public String format(int moneyInt){return format(numberFormat.format(moneyInt));}public String format(long moneyLong){return format(numberFormat.format(moneyLong));}public String format(Number moneyNum){return format(numberFormat.format(moneyNum));}private String convertToChineseNumber(String moneyStr){String result;StringBuffer cMoneyStringBuffer = new StringBuffer();for (int i = 0; i < moneyStr.length(); i++) {cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i+1)));}//拾佰仟萬億等都是漢字里面才有的單位,加上它們int indexOfDot = cMoneyStringBuffer.indexOf(DOT);int moneyPatternCursor = 1;for(int i=indexOfDot-1;i>0;i--){cMoneyStringBuffer.insert(i,chineseMoneyPattern.get(EMPTY+moneyPatternCursor));moneyPatternCursor = moneyPatternCursor == 8?1:moneyPatternCursor+1;}String fractionPat = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."),cMoneyStringBuffer.length());while(cMoneyStringBuffer.indexOf("零拾")!=-1){cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"), cMoneyStringBuffer.indexOf("零拾")+2, ZERO);}while (cMoneyStringBuffer.indexOf("零佰") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"), cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);}while (cMoneyStringBuffer.indexOf("零仟") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"), cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);}while (cMoneyStringBuffer.indexOf("零萬") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零萬"), cMoneyStringBuffer.indexOf("零萬") + 2, TEN_THOUSAND);}while (cMoneyStringBuffer.indexOf("零億") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零億"), cMoneyStringBuffer.indexOf("零億") + 2, HUNDRED_MILLION);}while (cMoneyStringBuffer.indexOf("零零") != -1) {cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"), cMoneyStringBuffer.indexOf("零零") + 2, ZERO);}if(cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length()-1)cMoneyStringBuffer.delete(cMoneyStringBuffer.length()-1, cMoneyStringBuffer.length());cMoneyStringBuffer.append(fractionPat);result = cMoneyStringBuffer.toString();return result;}private String addUnitsToChineseMoneyString(String moneyStr){String result;StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);int indexOfDot = cMoneyStringBuffer.indexOf(DOT);cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);cMoneyStringBuffer.insert(cMoneyStringBuffer.length() - 1, JIAO);cMoneyStringBuffer.insert(cMoneyStringBuffer.length(), FEN);if (cMoneyStringBuffer.indexOf("零角零分") != -1)//沒有零頭,加整cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零角零分"), cMoneyStringBuffer.length(), "整");elseif (cMoneyStringBuffer.indexOf("零分") != -1)//沒有零分,加整cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零分"), cMoneyStringBuffer.length(), "整");else {if(cMoneyStringBuffer.indexOf("零角")!=-1)cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("零角"),cMoneyStringBuffer.indexOf("零角")+2);// tmpBuffer.append("整");}result = cMoneyStringBuffer.toString();return result;}private void checkPrecision(String moneyStr){int fractionDigits = moneyStr.length()-moneyStr.indexOf(DOT)-1;if(fractionDigits>2)throw new RuntimeException("金額"+moneyStr+"的小數位多于兩位。");//精度不能比分低}public static void main(String [] args){System.out.println(getInstance().format(new Double(100100001.01)));}}
結果如下:
壹億零壹拾萬零壹元壹分



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大學四年自學進BAT,私下存的資源/工具/網站我全貢獻出來了

這些工具/網站是我橫掃BAT的重要一步&#xff0c;甚至是決定性的一步。以后會更簡歷書寫、面試筆試、大學學習、工具等文章。 大學四年&#xff0c;上課是不可能一直上課的&#xff0c;看課本也是不可能一直看課本的。 不是說老師教的不好&#xff0c;教材寫的不好&#xff0c…

我是CSDN最硬核作者,誰贊成,誰反對?

也許是現在&#xff0c;也許是未來&#xff0c;我是全網最硬核的作者&#xff0c;最值得愛學習愛編程的崽崽們關注的作者。 一、介紹自己 哈嘍大家好&#xff0c;我是兔老大&#xff0c;之前叫過兔兔兔兔兔兔、兔兔RabbitMQ等&#xff0c;反正都是兔子啦&#xff0c;自從大學…

當年,學姐總結奇安信18k常問面試題

她確實拿了18k&#xff0c;真人真事&#xff0c;也不是很高&#xff0c;我沒必要編。 黑色字為問題&#xff0c;紅色字為答案&#xff0c;空行為一個面試過程 自我介紹 家在哪&#xff0c;工作地 測試需要掌握啥 V模型W模型 最典型的V模型版本一般會在其開始部分對軟件開發…

最強阿里巴巴歷年經典面試題匯總:C++研發崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 本系列歷史文章&#xff1a; 關于我的那些面經——百度后端&#xff08;附答案&#xff09; 《關于我的那些面經》滴滴Java崗&#xff08;附答案&#xff09; 朋…

當年,兔子學姐靠這個面試小抄拿了個22k

本文順序是操作系統&#xff08;jvm&#xff09;、網絡、數據庫&#xff08;mysql/redis&#xff09;&#xff0c;都是當時兔子的學姐準備面試的時候總結的&#xff0c;學生面試基本不會跑出這個范圍&#xff0c;懂行的應該能看出來。 學姐原話&#xff1a;因為我本身的知識是A…

用JAVA SOCKET編程,讀服務器幾個字符,再寫入本地顯示

Server: package cn.itcast.framework.socket;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;//用JAVA SOCKET編程&#xff0c;讀服務器…

學姐,來挑戰字節最牛部門

字節&#xff08;分布式圖數據庫研發工程師&#xff09;真實面經&#xff0c;其實是個學長&#xff0c;但是同學們都叫他學姐&#xff0c;可能是因為帥到把女生都比下去了。 本系列歷史文章&#xff1a; 最強阿里巴巴歷年經典面試題匯總&#xff1a;C研發崗 關于我的那些面經…

學姐百度實習面經(輕松拿offer)

本系列歷史文章&#xff1a; 學姐&#xff0c;來挑戰字節最牛部門 最強阿里巴巴歷年經典面試題匯總&#xff1a;C研發崗 關于我的那些面經——百度后端&#xff08;附答案&#xff09; 《關于我的那些面經》滴滴Java崗&#xff08;附答案&#xff09; 朋友面神策數據庫&am…

阿里巴巴歷年經典面試題匯總:Java崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 本系列歷史文章&#xff1a; 學姐百度實習面經 學姐&#xff0c;來挑戰字節最牛部門 最強阿里巴巴歷年經典面試題匯總&#xff1a;C研發崗 關于我的那些面經—…

超經典,阿里巴巴歷年高頻面試題匯總:前端崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 本系列歷史文章&#xff1a; 阿里巴巴歷年經典面試題匯總&#xff1a;Java崗 學姐百度實習面經 學姐&#xff0c;來挑戰字節最牛部門 最強阿里巴巴歷年經典面試…

超經典,百度最愛考的安卓Android百題

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 本系列歷史文章&#xff1a; 超經典&#xff0c;阿里巴巴歷年高頻面試題匯總&#xff1a;前端崗 阿里巴巴歷年經典面試題匯總&#xff1a;Java崗 學姐百度實習面…

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

今天在寫jbpm獲取流程變量的時候出現了這個異常&#xff1a;org.hibernate.LazyInitializationException: could not initialize proxy - no Session 原因就是jbpm的底層采用了懶加載的方式&#xff0c;解決這個異常的方法就是在對象的映射文件中去掉默認的懶加載&#xff0c;例…

最容易進的大廠工作,百度經典百題

最容易進大廠的機會就是百度的測試&#xff0c;不服來辯。 這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 本系列歷史文章&#xff1a; 超經典&#xff0c;百度最愛考的安卓Android百題 超經典&#xff0c;阿…

超硬核!兔兔阿里p7學長給的面試知識庫

一個阿里p7學長給的nosql面試知識庫&#xff0c;絕對真實&#xff0c;學會了去面呀。 最近整理了一下超硬核系列的文章和面經系列的文章&#xff0c;可以持續關注下&#xff1a; 超硬核系列歷史文章&#xff1a;&#xff08;我保證每篇文章都有值得學習的地方&#xff0c;并…

百度校園招聘歷年經典面試題匯總:C++研發崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 這個系列離結束差的還特別多&#xff0c;會更新涵蓋所有一線大廠的所有崗位&#xff0c;也可以關注一下。 最容易進的大廠工作&#xff0c;百度經典百題 超經典&…

百度校招歷年經典面試題匯總:Java開發崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 這個系列離結束差的還特別多&#xff0c;會更新涵蓋所有一線大廠的所有崗位&#xff0c;也可以關注一下。 百度校園招聘歷年經典面試題匯總&#xff1a;C研發崗 …

京東華為 Java開發歷年經典題匯總

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 這個系列離結束差的還特別多&#xff0c;會更新涵蓋所有一線大廠的所有崗位&#xff0c;也可以關注一下。 百度校招歷年經典面試題匯總&#xff1a;Java開發崗 百…

13個mysql數據庫的實用SQL小技巧

MYSQL作為最成功的開源關系型數據庫之一&#xff0c;擁有大批的粉絲&#xff08;本人也是&#xff09;&#xff0c;在這篇文章中&#xff0c;我們精心收集了10個最實用的mysql查詢技巧&#xff0c;希望能夠帶給大家驚喜&#xff0c;如果大家也有非常不錯的SQL&#xff0c;請留言…

今日頭條校園招聘歷年經典面試題匯總:C++研發崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 這個系列離結束差的還特別多&#xff0c;會更新涵蓋所有一線大廠的所有崗位&#xff0c;也可以關注一下。 京東&華為 Java開發歷年經典題匯總 百度校招歷年經…

騰訊校招歷年經典面試匯總:C++研發崗

這個系列計劃收集幾百份朋友和讀者的面經&#xff0c;作者合集方便查看&#xff0c;各位有面經屯著可以聯系我哦 這個系列離結束差的還特別多&#xff0c;會更新涵蓋所有一線大廠的所有崗位&#xff0c;也可以關注一下。 今日頭條校園招聘歷年經典面試題匯總&#xff1a;C研發…