導航:首頁 > 編程語言 > 人民幣轉大寫java

人民幣轉大寫java

發布時間:2022-04-22 22:15:27

A. 請教哪位朋友知道如何用java編寫人民幣的大小寫轉換謝謝!

一個比較原始的方法(數字轉化為漢字),部分處理不完整,演算法也沒有優化,這里只是給你一個大概的思路。一些具體的地方還需要你自己去處理。
public String trans(String sour){
String rs[][]={
{"1","壹"},{"2","貳"},{"3","叄"},{"4","肆"},{"5","伍"},{"6","陸"},{"7","柒"},{"8","捌"}, {"9","玖"},{"0","零"}
};
String dw[][]={{"1","元"},{"2","拾"},{"3","佰"},{"4","仟"},{"5","萬"},{"-1","角"},{"-2","分"}};//單位數組
String jg="";//處理後的字元串
boolean flag=false;//是否顯示」整「
int indexOfdian=sour.indexOf(".");//判斷小數點的位置
if(indexOfdian==-1){//如果沒有小數點
flag=true;
indexOfdian=sour.length();
}
for(int i=0;i<sour.length();i++){//循環源字元串
String temp=sour.substring(i, i+1);
if(temp.equals("0")){//零的處理 (不完整)
continue;
}
for(int j=0;j<rs.length;j++){//循環轉換數組
if(temp.equals(rs[j][0])){
jg=jg+rs[j][1];
}
}
for(int k=0;k<dw.length;k++){//循環單位數組
String mask=String.valueOf(indexOfdian-i);
if(mask.equals(dw[k][0])){
jg=jg+dw[k][1];
}
}
}
if(flag){
jg=jg+"整";
}
return jg;
}

B. java簡單題:一組金額數據,用人民幣大寫顯示出來

/**
*程序目的:
*從命令行接收一個數,並將其轉化為中文金額的大寫方式
*例如123.45-->壹佰貳拾叄元肆角伍分
*@authorgdb
*
*實在是不符合規范,程序裡面的演算法沒有讓人明白得很清楚的注釋,讀上去覺得有
*點難度,可讀性不強。而且很多程序還存在不少bug,隨便一測就測出來了。
*所以本人還是決定重新寫一下這個程序,並且盡量做到消除不必要的bug。這個程
*序我沒有用什麼很精妙的演算法,不過用了一些Java類庫中的類,像是正則表達式之類
*
*/
publicclassTrans2RMB{

/**
*測試程序的可行性
*@paramargs
*/
publicstaticvoidmain(String[]args){
System.out.println(" --------將數字轉換成中文金額的大寫形式------------ ");
Trans2RMBt2r=newTrans2RMB();
Strings=t2r.cleanZero(t2r.splitNum(t2r.roundString(t2r.getNum())));
//如果轉換過後是一個空串,則不輸出屏幕
if(!"".equals(s)){
System.out.println("轉換成中文後為:"+s);;
}
System.out.println(" ---------------------------------------------");
}

/**
*從命令行接收一個數,在其中調用checkNum()方法對其進行
*驗證,並返回相應的值
*@return如果輸入合法,返回輸入的這個數
*/
privateStringgetNum(){
Strings=null;
System.out.println("請輸入一個數字(精確到小數點後兩位):");
//從命令行輸入這個浮點數
java.util.Scannerscanner=newjava.util.Scanner(System.in);
s=scanner.next();
//關閉這個Scanner
scanner.close();
//判斷用戶輸入是否合法
//若合法,返回這個值;若非法返回"0"
if(this.checkNum(s)){
returns;
}else{
return"";
}
}

/**
*判斷用戶輸入的數據是否合法,用戶只能輸入大於零的數字,不能輸入其它字元
*@paramsString
*@return如果用戶輸入數據合法,返回true,否則返回false
*/
privatebooleancheckNum(Strings){
//如果用戶輸入的數里有非數字字元,則視為非法數據,返回false
try{
floatf=Float.valueOf(s);
//如果這個數小於零則視為非法數據,返回false
if(f<0){
System.out.println("非法數據,請檢查!");
returnfalse;
}else{
returntrue;
}
}catch(NumberFormatExceptione){
System.out.println("非法數據,請檢查!");
returnfalse;
}
}

/**
*把用戶輸入的數以小數點為界分割開來,並調用numFormat()方法
*進行相應的中文金額大寫形式的轉換
*註:傳入的這個數應該是經過roundString()方法進行了四捨五入操作的
*@paramsString
*@return轉換好的中文金額大寫形式的字元串
*/
privateStringsplitNum(Strings){
//如果傳入的是空串則繼續返回空串
if("".equals(s)){
return"";
}
//以小數點為界分割這個字元串
intindex=s.indexOf(".");
//截取並轉換這個數的整數部分
StringintOnly=s.substring(0,index);
Stringpart1=this.numFormat(1,intOnly);
//截取並轉換這個數的小數部分
StringsmallOnly=s.substring(index+1);
Stringpart2=this.numFormat(2,smallOnly);
//把轉換好了的整數部分和小數部分重新拼湊一個新的字元串
StringnewS=part1+part2;
returnnewS;
}

/**
*對傳入的數進行四捨五入操作
*@paramsString從命令行輸入的那個數
*@return四捨五入後的新值
*/
privateStringroundString(Strings){
//如果傳入的是空串則繼續返回空串
if("".equals(s)){
return"";
}
//將這個數轉換成double類型,並對其進行四捨五入操作
doubled=Double.parseDouble(s);
//此操作作用在小數點後兩位上
d=(d*100+0.5)/100;
//將d進行格式化
s=newjava.text.DecimalFormat("##0.000").format(d);
//以小數點為界分割這個字元串
intindex=s.indexOf(".");
//這個數的整數部分
StringintOnly=s.substring(0,index);
//規定數值的最大長度只能到萬億單位,否則返回"0"
if(intOnly.length()>13){
System.out.println("輸入數據過大!(整數部分最多13位!)");
return"";
}
//這個數的小數部分
StringsmallOnly=s.substring(index+1);
//如果小數部分大於兩位,只截取小數點後兩位
if(smallOnly.length()>2){
StringroundSmall=smallOnly.substring(0,2);
//把整數部分和新截取的小數部分重新拼湊這個字元串
s=intOnly+"."+roundSmall;
}
returns;
}

/**
*把傳入的數轉換為中文金額大寫形式
*@paramflagint標志位,1表示轉換整數部分,0表示轉換小數部分
*@paramsString要轉換的字元串
*@return轉換好的帶單位的中文金額大寫形式
*/
privateStringnumFormat(intflag,Strings){
intsLength=s.length();
//貨幣大寫形式
StringbigLetter[]={"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};
//貨幣單位
Stringunit[]={"元","拾","佰","仟","萬",
//拾萬位到仟萬位
"拾","佰","仟",
//億位到萬億位
"億","拾","佰","仟","萬"};
Stringsmall[]={"分","角"};
//用來存放轉換後的新字元串
StringnewS="";
//逐位替換為中文大寫形式
for(inti=0;i<sLength;i++){
if(flag==1){
//轉換整數部分為中文大寫形式(帶單位)
newS=newS+bigLetter[s.charAt(i)-48]+unit[sLength-i-1];
}elseif(flag==2){
//轉換小數部分(帶單位)
newS=newS+bigLetter[s.charAt(i)-48]+small[sLength-i-1];
}
}
returnnewS;
}

/**
*把已經轉換好的中文金額大寫形式加以改進,清理這個字
*符串裡面多餘的零,讓這個字元串變得更加可觀
*註:傳入的這個數應該是經過splitNum()方法進行處理,這個字
*符串應該已經是用中文金額大寫形式表示的
*@paramsString已經轉換好的字元串
*@return改進後的字元串
*/
privateStringcleanZero(Strings){
//如果傳入的是空串則繼續返回空串
if("".equals(s)){
return"";
}
//如果用戶開始輸入了很多0去掉字元串前面多餘的'零',使其看上去更符合習慣
while(s.charAt(0)=='零'){
//將字元串中的"零"和它對應的單位去掉
s=s.substring(2);
//如果用戶當初輸入的時候只輸入了0,則只返回一個"零"
if(s.length()==0){
return"零";
}
}
//字元串中存在多個'零'在一起的時候只讀出一個'零',並省略多餘的單位
/*由於本人對演算法的研究太菜了,只能用4個正則表達式去轉換了,各位大蝦別介意哈...*/
Stringregex1[]={"零仟","零佰","零拾"};
Stringregex2[]={"零億","零萬","零元"};
Stringregex3[]={"億","萬","元"};
Stringregex4[]={"零角","零分"};
//第一輪轉換把"零仟",零佰","零拾"等字元串替換成一個"零"
for(inti=0;i<3;i++){
s=s.replaceAll(regex1[i],"零");
}
//第二輪轉換考慮"零億","零萬","零元"等情況
//"億","萬","元"這些單位有些情況是不能省的,需要保留下來
for(inti=0;i<3;i++){
//當第一輪轉換過後有可能有很多個零疊在一起
//要把很多個重復的零變成一個零
s=s.replaceAll("零零零","零");
s=s.replaceAll("零零","零");
s=s.replaceAll(regex2[i],regex3[i]);
}
//第三輪轉換把"零角","零分"字元串省略
for(inti=0;i<2;i++){
s=s.replaceAll(regex4[i],"");
}
//當"萬"到"億"之間全部是"零"的時候,忽略"億萬"單位,只保留一個"億"
s=s.replaceAll("億萬","億");
returns;
}
}

C. java來實現最高五位的人民幣轉換為大寫的一個小程序,用最基礎的方法

//這個可以直接插到jsp頁面中的。也可以自行調整為servlet。
//處理大寫問題
int value = Integer.parseInt(getParameter("inmoney"));//inmoney是別的頁面傳遞的參數。

char[] hunit={'拾','佰','仟'}; //段內位置表示
char[] vunit={'萬','億'}; //段名表示
char[] digit={'零','壹','貳','叄','肆','伍','陸','柒','捌','玖'}; //數字表示
// long midVal = (long)(value*100); ////存在精度問題,如0.9->0.8999...
BigDecimal midVal = new BigDecimal(Math.round(value)); //轉化成整形,替換上句
String valStr=String.valueOf(midVal); //轉化成字元串
String head=valStr.substring(0,valStr.length()); //取整數部分
// String rail=valStr.substring(valStr.length()-2); //取小數部分
String prefix=""; //整數部分轉化的結果
String suffix=""; //小數部分轉化的結果
//處理小數點後面的數
// if(rail.equals("00")){ //如果小數部分為0
// suffix="整";
//}else{
// suffix=digit[rail.charAt(0)-'0']+"角"+digit[rail.charAt(1)-'0']+"分"; //否則把角分轉化出來
//}
//處理小數點前面的數
char[] chDig=head.toCharArray(); //把整數部分轉化成字元數組
boolean preZero=false; //標志當前位的上一位是否為有效0位(如萬位的0對千位無效)
byte zeroSerNum = 0; //連續出現0的次數
for(int i=0;i<chDig.length;i++){ //循環處理每個數字
int idx=(chDig.length-i-1)%4; //取段內位置
int vidx=(chDig.length-i-1)/4; //取段位置
if(chDig[i]=='0'){ //如果當前字元是0
preZero=true;
zeroSerNum++; //連續0次數遞增
if(idx==0 && vidx >0 &&zeroSerNum < 4){
prefix += vunit[vidx-1];
preZero=false; //不管上一位是否為0,置為無效0位
}
}else{
zeroSerNum = 0; //連續0次數清零
if(preZero) { //上一位為有效0位
prefix+=digit[0]; //只有在這地方用到'零'
preZero=false;
}
prefix+=digit[chDig[i]-'0']; //轉化該數字表示
if(idx > 0) prefix += hunit[idx-1];
if(idx==0 && vidx>0){
prefix+=vunit[vidx-1]; //段結束位置應該加上段名如萬,億
}
}
}
if(prefix.length() > 0){
prefix +="圓整"; //如果整數部分存在,則有圓的字樣
}

D. 如何用java applet做一個人民幣大小寫轉換器

這個很簡單的,主要就用到button和text兩個組件。
定義兩個大寫的字元串數組:一個用來存「拾佰仟萬」,一個存儲「壹貳叄肆……」
在text框里輸入內容,根據ASC碼判斷,如果為數字,則根據數字長度從兩個數組中取值,拼接成串輸出到text框;
否則,根據讀取的字元轉換為數字。
若有其他字元,便認為失敗。

E. Java將控制台輸入的人民幣數字金額轉化為大寫

代碼如下:
/**
* 人民幣轉成大寫
*
* @param value
* @return String
*/
public static String hangeToBig(double value)
{
char[] hunit = { '拾', '佰', '仟' }; // 段內位置表示
char[] vunit = { '萬', '億' }; // 段名表示
char[] digit = { '零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖' }; // 數字表示
long midVal = (long) (value * 100); // 轉化成整形
String valStr = String.valueOf(midVal); // 轉化成字元串
String head = valStr.substring(0, valStr.length() - 2); // 取整數部分
String rail = valStr.substring(valStr.length() - 2); // 取小數部分
String prefix = ""; // 整數部分轉化的結果
String suffix = ""; // 小數部分轉化的結果
// 處理小數點後面的數
if (rail.equals("00"))
{ // 如果小數部分為0
suffix = "整";
}
else
{
suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否則把角分轉化出來
}
// 處理小數點前面的數
char[] chDig = head.toCharArray(); // 把整數部分轉化成字元數組
char zero = '0'; // 標志'0'表示出現過0
byte zeroSerNum = 0; // 連續出現0的次數
for (int i = 0; i < chDig.length; i++)
{ // 循環處理每個數字
int idx = (chDig.length - i - 1) % 4; // 取段內位置
int vidx = (chDig.length - i - 1) / 4; // 取段位置
if (chDig[i] == '0')
{ // 如果當前字元是0
zeroSerNum++; // 連續0次數遞增
if (zero == '0')
{ // 標志
zero = digit[0];
}
else if (idx == 0 && vidx > 0 && zeroSerNum < 4)
{
prefix += vunit[vidx - 1];
zero = '0';
}
continue;
}
zeroSerNum = 0; // 連續0次數清零
if (zero != '0')
{ // 如果標志不為0,則加上,例如萬,億什麼的
prefix += zero;
zero = '0';
}
prefix += digit[chDig[i] - '0']; // 轉化該數字表示
if (idx > 0)
prefix += hunit[idx - 1];
if (idx == 0 && vidx > 0)
{
prefix += vunit[vidx - 1]; // 段結束位置應該加上段名如萬,億
}
}
if (prefix.length() > 0)
prefix += '圓'; // 如果整數部分存在,則有圓的字樣
return prefix + suffix; // 返回正確表示
}

F. 注釋java人民幣小寫轉換大寫的代碼

publicstatic String toRMB(double money) {
char[] s1 = {'零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖'};
char[] s4 = {'分', '角', '元', '拾', '佰', '仟', '萬', '拾', '佰', '仟', '億', '拾', '佰', '仟', '萬'};
//這兩句是為後面轉換做字典准備
String str = String.valueOf(Math.round(money * 100 + 0.00001));
//這是把參數money小數點後移2位,然後取整,即按照「分」為單位取整,再轉為字元串型
String result = "";

for (int i = 0; i <str.length(); i++) {
int n = str.charAt(str.length() - 1 - i) - '0';
result = s1[n] + "" + s4[i] + result;
}
//這一段是按照轉換出來的字元串按位取數字,再按照上面的字典將其逐位翻譯成漢字
//如「2011」就翻譯成「貳仟零佰壹拾壹元」,「98700432.10」就是「玖仟捌佰柒拾零萬零仟肆佰叄拾貳元壹角零分」——註:這里的人民幣大寫漢字,貌似有錯誤,請查閱相關資料更正
//以上的翻譯可以看出,和我們平時的認讀有差別,於是以下就是在將那些應該糾正的地方手動剔除以下。上述兩個例子最後得到的結果應該是「貳仟零壹拾壹元整」,「玖仟捌佰柒拾萬零肆佰叄拾貳元壹角整」
result = result.replaceAll("零仟", "零");
result = result.replaceAll("零佰", "零");
result = result.replaceAll("零拾", "零");
result = result.replaceAll("零億", "億");
result = result.replaceAll("零萬", "萬");
result = result.replaceAll("零元", "元");
result = result.replaceAll("零角", "零");
result = result.replaceAll("零分", "零");

result = result.replaceAll("零零", "零");
result = result.replaceAll("零億", "億");
result = result.replaceAll("零零", "零");
result = result.replaceAll("零萬", "萬");
result = result.replaceAll("零零", "零");
result = result.replaceAll("零元", "元");
result = result.replaceAll("億萬","億");

result = result.replaceAll("零$", "");
result = result.replaceAll("元$", "元整");
result = result.replaceAll("角$", "角整");

return result;
}

G. 誰有簡化的方法用JAVA編寫一個把表示人民幣的阿拉伯數字轉化為大寫漢字的方法

public class RenMingBi {

/**
* @param args add by zxx ,Nov 29, 2008
*/
private static final char[] data = new char[]{
'零','壹','貳','叄','肆','伍','陸','柒','捌','玖'
};
private static final char[] units = new char[]{
'元','拾','佰','仟','萬','拾','佰','仟','億'
};
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(
convert(135689123));
}

public static String convert(int money)
{
StringBuffer sbf = new StringBuffer();
int unit = 0;
while(money!=0)
{
sbf.insert(0,units[unit++]);
int number = money%10;
sbf.insert(0, data[number]);
money /= 10;
}

return sbf.toString();
}
}

H. 如何用Java編程實現人民幣大小寫轉換

public String GetBigMoney(double eSender)
{
double NewMoney;
int Index, len, flag;
String StrTemp = null;
char[] p;
String Number[]={"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};
String MonetaryUnit[] = {"萬","仟","佰","拾","億","仟","佰","拾","萬","仟","佰","拾","元","角","分"} ;
NewMoney = Math.abs(eSender);
System.out.println(NewMoney);
DecimalFormat deciformat;
deciformat=(DecimalFormat)DecimalFormat.getInstance();
deciformat.applyPattern("#######");
String m = java.lang.String.valueOf(deciformat.format(NewMoney * 100));
int i;
if((i = m.indexOf('.')) != -1)
m = m.substring(0, i);
p = new char[m.length()];
//p = new char[40];
m.getChars(0, m.length(), p, 0);
//len=m.length();
if (NewMoney > 100000000000.00) {
StrTemp = ""; // FloatAsComma( NewMoney, False );
return StrTemp;
}
if (NewMoney < 0.01) {
StrTemp = "零";
return StrTemp;
}
if (eSender<0) {
StrTemp = "負";
}
else {
StrTemp = "";
}
flag = 1;
len =p.length;
System.out.println("1111");
System.out.println(len);
for (Index=(15-len);Index<15;Index++)
{
if (p[Index - 15 + len]!='0')
{
StrTemp = StrTemp + Number[Integer.parseInt(String.valueOf(p[Index-15+len]))];
StrTemp = StrTemp + MonetaryUnit[Index];
}
else
{
if (Index == 5)
{
if ((p[Index - 14 + len]!= '0') || (p[Index-13+len] != '0'))
{
StrTemp = StrTemp + MonetaryUnit[Index + 3];
flag = 0;
}

}
else
{
if ((Index == 12) ||( (Index == 8) && (flag ==1)) || (Index == 4))
{
StrTemp = StrTemp + MonetaryUnit[Index];
}
if ((p[Index-15 + len] != '0') && (Index != 14))
{
StrTemp = StrTemp +Number[Integer.parseInt(String.valueOf(p[Index-15+len]))];
;
}
}
}
}
if (p[m.length()-1] == '0')
{
StrTemp = StrTemp + "整";
}
return StrTemp;
}

I. java實現人民幣大寫換數字

把數字 分成3截 億 萬 萬以內 再對每一段 轉換 這樣 就不太容易出現 考慮不到的地方

jk.method("壹億貳佰陸拾捌萬壹拾捌圓");

String method1(String s){
if (s.contains("億")) {
String[] array = s.split("億");
return array[0];
}else {
return "";
}
}
String method2(String s){
if (s.contains("億")) {
String[] array = s.split("億");
if (array[1].contains("萬")) {
String[] arr = array[1].split("萬");
return arr[0];
}else {
return "";
}
}else {
if (s.contains("萬")) {
String[] arr = s.split("萬");
return arr[0];
}else {
return "";
}
}

}
String method3(String s){
if (!s.contains("萬") && !s.contains("億")) {
return s;
}else {
String[] arr = s.split("萬");
return arr[arr.length-1];
}
}

long method(String num){
long high = 0;
long mid = 0;
long low = 0;
String hi ="";
String mi ="";
String lo ="";
hi = method1(num);
mi = method2(num);
lo = method3(num);
if (hi != "") {
high = suoShu(hi)*100000000;
}
if (mi != "") {
mid = suoShu(mi)*10000;
}
if (lo != "") {
low = suoShu(lo);
}
System.out.println(high+mid+low);
return high+mid+low;
}

long suoShu(String num){
char[] arr = num.toCharArray();
long money = 0;
long mult = 0;
long no = 0;
for (int i = 0; i < arr.length; i++) {
long temp = 0;
if (isNum(arr[i])) {
no = getNum(arr[i]);
}else if (isFlag(arr[i])) {
mult = getFlag(arr[i]);
}
if (no > 0 && mult >0) {
temp = no * mult;
no = 0;
mult = 0;
}
money = money + temp;
if (arr.length <= 1) {
money = no * 1;
}
}
System.out.println(money);
return money;
}

long getNum(char num){
switch (num) {
case '零':
return 0;
case '壹':
return 1;
case '貳':
return 2;
case '叄':
return 3;
case '肆':
return 4;
case '伍':
return 5;
case '陸':
return 6;
case '柒':
return 7;
case '捌':
return 8;
case '玖':
return 9;
default:
return 0;
}

}
long getFlag(char flag){
switch (flag) {
case '圓':
return 1;
case '拾':
return 10;
case '佰':
return 100;
case '仟':
return 1000;
case '萬':
return 10000;
case '億':
return 100000000;
default:
return 0;
}
}

boolean isNum(char num){
switch (num) {
case '零':
return true;
case '壹':
return true;
case '貳':
return true;
case '叄':
return true;
case '肆':
return true;
case '伍':
return true;
case '陸':
return true;
case '柒':
return true;
case '捌':
return true;
case '玖':
return true;
default:
return false;
}

}
boolean isFlag(char flag){
switch (flag) {
case '圓':

return true;
case '拾':

return true;
case '佰':

return true;
case '仟':

return true;
case '萬':

return true;
case '億':

return true;
case '兆':

return true;
default:
return false;
}
}

閱讀全文

與人民幣轉大寫java相關的資料

熱點內容
linux打包命令targz 瀏覽:996
抖音app是哪個 瀏覽:407
蘋果app怎麼上架 瀏覽:255
NA伺服器地址 瀏覽:427
我的世界如何初始化伺服器 瀏覽:97
哪個手機app天氣預報最准 瀏覽:752
怎樣把視頻壓縮至25m 瀏覽:570
vivox27文件夾怎麼改變 瀏覽:727
新手玩狼人殺用什麼app 瀏覽:615
pdf在線查看 瀏覽:954
安卓tv90如何關閉後台 瀏覽:683
php讀取word亂碼 瀏覽:755
minicom源碼 瀏覽:1001
海爾冷櫃壓縮機 瀏覽:416
聯通伺服器如何調試信號 瀏覽:136
stata新命令 瀏覽:941
單調棧演算法python 瀏覽:606
微信解壓游戲怎麼下載 瀏覽:962
忍三伺服器不同如何登上賬號 瀏覽:822
php求積 瀏覽:297