java實(shí)現(xiàn)整數(shù)轉(zhuǎn)化為中文大寫(xiě)金額的方法
在日常生活中,我們經(jīng)常會(huì)將阿拉伯?dāng)?shù)字轉(zhuǎn)化為中文大寫(xiě)的情況:"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖", "拾", "佰", "仟", "萬(wàn)", "億",因此自己就編寫(xiě)一個(gè)類(lèi),實(shí)現(xiàn)該功能的轉(zhuǎn)化。
實(shí)現(xiàn)過(guò)程:
對(duì)于這個(gè)問(wèn)題的實(shí)現(xiàn),我們首先把數(shù)字按四位一個(gè)拆開(kāi)(符合我們讀數(shù)字的習(xí)慣),然后對(duì)這四位數(shù),做出他的讀法,具體代碼如下:
private static String getNumberStr1000 (int num) { if (num > 9999 || num < 0) { return ""; } int q = num / 1000; int b = (num / 100) % 10; int s = (num / 10) % 10; int g = num % 10; StringBuffer sb = new StringBuffer(); //千 if (q > 0) { sb.append(NUMBER1[q]); sb.append(NUMBER2[3]); } //百 if (b > 0) { sb.append(NUMBER1[b]); sb.append(NUMBER2[2]); } else { if (q != 0) { sb.append(NUMBER2[0]); } } //十 if (s > 0) { sb.append(NUMBER1[s]); sb.append(NUMBER2[1]); } else { if (b != 0) { sb.append(NUMBER2[0]); } } //個(gè) if (g > 0) { sb.append(NUMBER1[g]); } return sb.toString(); }
下面我們只需要在編寫(xiě)一個(gè)方法,實(shí)現(xiàn)每個(gè)四位數(shù)的讀法以及對(duì)應(yīng)的單位即可,具體代碼如下:
public static String getNumberStr(int num) { if (num < 0) { return ""; } if (num == 0) { return NUMBER1[0]; } int split = 10000; int y = num / (split * split); int w = (num / split) % split; int g = num % split; StringBuffer sb = new StringBuffer(); //億 if (y > 0) { sb.append(getNumberStr1000(y)); sb.append(NUMBER2[5]); } //萬(wàn) if (w > 999) { sb.append(getNumberStr1000(w)); sb.append(NUMBER2[4]); } else { if (w > 0) { if (y != 0) { sb.append(NUMBER2[0]); } sb.append(getNumberStr1000(w)); sb.append(NUMBER2[4]); } } //萬(wàn)以下 if (g > 0) { if (w != 0) { if (g > 999) { sb.append(getNumberStr1000(g)); } else { sb.append(NUMBER2[0]); sb.append(getNumberStr1000(g)); } } else { if (y != 0) { sb.append(NUMBER2[0]); } sb.append(getNumberStr1000(g)); } } return sb.toString(); }
完整源代碼:
/** *@Description: */ package com.lulei.util; public class NumberUtil { private static String[] NUMBER1 = {"零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖"}; private static String[] NUMBER2 = {"零", "拾", "佰", "仟", "萬(wàn)", "億"}; /** * @param num * @return * @Author:lulei * @Description:將數(shù)字轉(zhuǎn)化為大寫(xiě) */ public static String getNumberStr(int num) { if (num < 0) { return ""; } if (num == 0) { return NUMBER1[0]; } int split = 10000; int y = num / (split * split); int w = (num / split) % split; int g = num % split; StringBuffer sb = new StringBuffer(); //億 if (y > 0) { sb.append(getNumberStr1000(y)); sb.append(NUMBER2[5]); } //萬(wàn) if (w > 999) { sb.append(getNumberStr1000(w)); sb.append(NUMBER2[4]); } else { if (w > 0) { if (y != 0) { sb.append(NUMBER2[0]); } sb.append(getNumberStr1000(w)); sb.append(NUMBER2[4]); } } //萬(wàn)以下 if (g > 0) { if (w != 0) { if (g > 999) { sb.append(getNumberStr1000(g)); } else { sb.append(NUMBER2[0]); sb.append(getNumberStr1000(g)); } } else { if (y != 0) { sb.append(NUMBER2[0]); } sb.append(getNumberStr1000(g)); } } return sb.toString(); } /** * @param num * @return * @Description:對(duì)萬(wàn)以下的數(shù)字進(jìn)行大小寫(xiě)轉(zhuǎn)化 */ private static String getNumberStr1000 (int num) { if (num > 9999 || num < 0) { return ""; } int q = num / 1000; int b = (num / 100) % 10; int s = (num / 10) % 10; int g = num % 10; StringBuffer sb = new StringBuffer(); //千 if (q > 0) { sb.append(NUMBER1[q]); sb.append(NUMBER2[3]); } //百 if (b > 0) { sb.append(NUMBER1[b]); sb.append(NUMBER2[2]); } else { if (q != 0) { sb.append(NUMBER2[0]); } } //十 if (s > 0) { sb.append(NUMBER1[s]); sb.append(NUMBER2[1]); } else { if (b != 0) { sb.append(NUMBER2[0]); } } //個(gè) if (g > 0) { sb.append(NUMBER1[g]); } return sb.toString(); } public static void main(String[] args) { // TODO Auto-generated method stub int i = 1; System.out.println(i + "--" + NumberUtil.getNumberStr(i)); i = 1001; System.out.println(i + "--" + NumberUtil.getNumberStr(i)); i = 100101; System.out.println(i + "--" + NumberUtil.getNumberStr(i)); i = 10100101; System.out.println(i + "--" + NumberUtil.getNumberStr(i)); i = 1234567890; System.out.println(i + "--" + NumberUtil.getNumberStr(i)); } }
測(cè)試運(yùn)行結(jié)果:
希望本文所述對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。
相關(guān)文章
SQL Server 2008登錄錯(cuò)誤:無(wú)法連接到(local)解決方法
在一些朋友安裝完SQL Server 2008之后大多會(huì)遇到連接出錯(cuò)的問(wèn)題比如:SQL Server 2008登錄錯(cuò)誤:無(wú)法連接到(local)等等相關(guān)問(wèn)題,本文將詳細(xì)介紹解決方法,需要的朋友可以參考下2012-12-12如何在SQL Server 2008下輕松調(diào)試T-SQL語(yǔ)句和存儲(chǔ)過(guò)程
sqlserver2008調(diào)試的要求和條件:如果在引擎所在的電腦或服務(wù)器上調(diào)試,則只需要SA或者WINDOWS用戶(hù)登陸即可。如果是異地調(diào)試,則需要設(shè)置防火墻例外,增加SSMS和SQLSERVER.EXE為允許,增加135端口允許通過(guò)2013-10-10sql2008啟動(dòng)代理未將對(duì)象應(yīng)用到實(shí)例解決方案
本文將介紹sql2008啟動(dòng)代理未將對(duì)象應(yīng)用到實(shí)例的多種原因,本文提供詳細(xì)解決方案,需要了解的朋友可以參考下2012-11-11Microsoft SQL Server 2008安裝圖解教程(Windows 7)
本文詳細(xì)介紹了SQL Server 2008的完整安裝過(guò)程,但未介紹關(guān)于SP1補(bǔ)丁安裝說(shuō)明,在Windows 7系統(tǒng)上運(yùn)行必須安裝此補(bǔ)丁,對(duì)于部分服務(wù)的配置也未做詳細(xì)的介紹2012-07-07SQL Server 2008 R2 應(yīng)用及多服務(wù)器管理
所謂多服務(wù)器管理 (Multiserver Administration)就是SQL Server 2008 R2提供的自動(dòng)管理多個(gè) SQL Server 實(shí)例過(guò)程的功能。在多服務(wù)器管理中,連接到主服務(wù)器并從其接收作業(yè)的服務(wù)器被稱(chēng)之為目標(biāo)服務(wù)器。2014-10-10使用Navicat Premium將SQLServer數(shù)據(jù)導(dǎo)出為sql格式
這篇文章主要介紹了使用Navicat Premium將SQLServer數(shù)據(jù)導(dǎo)出為sql格式,需要的朋友可以參考下2016-12-12SQL Server 2008數(shù)據(jù)庫(kù)誤刪數(shù)據(jù)如何進(jìn)行數(shù)據(jù)恢復(fù)
這篇文章主要為大家詳細(xì)介紹了SQL Server 2008數(shù)據(jù)庫(kù)誤刪數(shù)據(jù)如何進(jìn)行數(shù)據(jù)恢復(fù)的方法,感興趣的小伙伴們可以參考一下2016-05-05SQL Server2008導(dǎo)出數(shù)據(jù)之Excel詳細(xì)解析
我覺(jué)得數(shù)據(jù)庫(kù)的導(dǎo)入和導(dǎo)出很有用,順便做一下總結(jié),以免將來(lái)有遺忘。需要的朋友可以過(guò)來(lái)參考下2013-08-08SQLServer 2008 新增T-SQL 簡(jiǎn)寫(xiě)語(yǔ)法
SQLServer 2008 新增T-SQL 簡(jiǎn)寫(xiě)語(yǔ)法2009-07-07