怎么写一个函数输入一个数字参数,输出为大写中文数字(例:输入12058.45,输出为:壹万贰仟零伍拾捌元肆角伍分)? 怎么写一个函数输入一个数字参数,输出为大写中文数字(例:输入12058.45,输出为:壹万贰仟零伍拾捌元肆角伍分)?各位有谁能指点在下,多谢啦!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我建议你分两步写,判断是否有. 点前和点后 分两步写使用 String.length 来判断后面的单位是什么。比如说.前一位就是元然后用String.substring 来取数字跟中文字符兑换,建议兑换换算用字符串进行 import java.lang.Math;class money { // 调试时用main函数 public static void main(String args[]) { money mon = new money(); System.out.println(mon.NumToRMBStr(-11.11)); System.out.println(mon.NumToRMBStr(11.11)); } String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" }; String PositiveIntegerToHanStr(String NumStr) { // 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零 String RMBStr = ""; boolean lastzero = false; boolean hasvalue = false; // 亿、万进位前有数值标记 int len, n; len = NumStr.length(); if (len > 15) return "数值过大!"; for (int i = len - 1; i >= 0; i--) { if (NumStr.charAt(len - i - 1) == ' ') continue; n = NumStr.charAt(len - i - 1) - '0'; if (n < 0 || n > 9) return "输入含非数字字符!"; if (n != 0) { if (lastzero) RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零 // 除了亿万前的零不带到后面 // if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) // // 如十进位前有零也不发壹音用此行 if (!(n == 1 && (i % 4) == 1 && i == len - 1)) // 十进位处于第一位不发壹音 RMBStr += HanDigiStr[n]; RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空 hasvalue = true; // 置万进位前有值标记 } else { if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) // 亿万之间必须有非零值方显示万 RMBStr += HanDiviStr[i]; // “亿”或“万” } if (i % 8 == 0) hasvalue = false; // 万进位前有值标记逢亿复位 lastzero = (n == 0) && (i % 4 != 0); } if (RMBStr.length() == 0) return HanDigiStr[0]; // 输入空字符或"0",返回"零" return RMBStr; } String NumToRMBStr(double val) { String SignStr = ""; String TailStr = ""; long fraction, integer; int jiao, fen; if (val < 0) { val = -val; SignStr = "负"; } if (val > 99999999999999.999 || val < -99999999999999.999) return "数值位数过大!"; // 四舍五入到分 long temp = Math.round(val * 100); integer = temp / 100; fraction = temp % 100; jiao = (int) fraction / 10; fen = (int) fraction % 10; if (jiao == 0 && fen == 0) { TailStr = "整"; } else { TailStr = HanDigiStr[jiao]; if (jiao != 0) TailStr += "角"; if (integer == 0 && jiao == 0) // 零元后不写零几分 TailStr = ""; if (fen != 0) TailStr += HanDigiStr[fen] + "分"; } // 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分” // if( !integer ) return SignStr+TailStr; return "¥" + SignStr + PositiveIntegerToHanStr(String.valueOf(integer)) + "元" + TailStr; }} 答:楼主,在最近的CSDN的JAVA版中,已经有几位都发帖问这个问题。而且回帖中,各种程序都有,请楼主搜一下,就会有许多。 public class MoneyUtil{ final static String[] MONEYNUMBER = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; final static String[] MONEYUNIT = {"分","角","元","万","亿"}; final static String ZHENG = "整"; final static String[] MONEYMULTIPLE = {"","拾","佰","仟"}; public static String moneyConvertToCapital(String sMoney){ String sMoneyCapital = ""; String sMoneyCapitalZheng = ""; String[] dt=Conve.SplitString(sMoney,"."); int flagIndex = 0; //MONEYUNIT位置标识 if(dt==null||dt.length!=2) return ""; int length = dt[0].length(); if(length>12) return "数字太大!!!"; if(dt[1].length()>2) dt[1] = dt[1].substring(0,2); if(dt[1].length()<2) dt[1] = String.valueOf(Integer.parseInt(dt[1])*10+100).substring(1); if(dt[1].equals("00")&&!dt[0].equals("0")) {//零分零角 flagIndex = 2; sMoneyCapital = ZHENG; } else if (dt[1].substring(1,2).equals("0")) {//零分 flagIndex = 1; sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + MONEYUNIT[flagIndex]; flagIndex = 2; } else { //非零分 sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(1,2))] + MONEYUNIT[flagIndex]; flagIndex = 1; if ((dt[1].substring(0,1)).equals("0")) {//零角、非零分 sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + sMoneyCapital; flagIndex = 2; }else{ //非零角、非零分 sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + MONEYUNIT[flagIndex] + sMoneyCapital; flagIndex = 2; } } if(!dt[0].equals("0")) {//整数位不为0 int iTemp = 0; boolean flagSin = false;//是否出现1标志 boolean flagPre = false;//是否前一位出现0标志 int j = 4; int m = 1; int temp = 0; int unit = 2; boolean moneyUnit = false; for(int i=length;i>=1;i--){ if(m%5==0){ m = 1; iTemp = 0; moneyUnit = true; unit++; } temp = Integer.parseInt(dt[0].substring(i-1,i)); if((m%j)==1){//是个位 if(temp!=0){ if(moneyUnit){ // if(!flagPre) sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ; moneyUnit = false; } sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng; flagSin = false; flagPre = false; }else{ if(i==length) flagSin = true; flagPre = true; } }else{//不是个位 if(temp==0){ if(!flagPre){ sMoneyCapitalZheng = MONEYNUMBER[0] + sMoneyCapitalZheng; }else{ } flagPre = true; }else{ if(moneyUnit){ if(!flagPre) sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ; else if(flagPre&&!flagSin) sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ; else if(flagPre&&flagSin) sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ; // unit++; moneyUnit = false; sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng; flagSin = false; flagPre = false; }else{ if(!flagPre){ sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng; }else{ sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng; } flagPre = false; flagSin = false; } } } iTemp++; m++; } } if(!sMoneyCapitalZheng.equals("")) return sMoneyCapitalZheng + MONEYUNIT[2] + sMoneyCapital; else return sMoneyCapital; } public static String billNo(int billno,int len){ if(billno>100000) return "单据超过5位!!!"; long date=System.currentTimeMillis(); java.sql.Date today = new java.sql.Date(date); String[] dt=Conve.SplitString(String.valueOf(today),"-"); if (dt==null||dt.length!=3) return null; String result = dt[0]+dt[1]; result = result + String.valueOf(len+billno).substring(1); return result; } //用","拆分金额数(三位一撇,如"4826111.26"-->4,826,111.26) public static final String splitFeeAmount(String str) { String str1=str; String str2=""; String str3=""; if (str.indexOf(".")>0) { str1=str.substring(0,str.indexOf(".")); str2=str.substring(str.indexOf(".")); } while (str1.length()>3) { str3=","+str1.substring(str1.length()-3)+str3; str1=str1.substring(0,str1.length()-3); } str=str1+str3+str2; return str; } public static void main(String args[]){ System.out.println("value is : " + moneyConvertToCapital("4028.9")); System.out.println("billno is : " + billNo(11,100000)); }} 答:http://topic.csdn.net/u/20080525/13/cfdc5d96-2440-47b2-b5bd-8b1d590eed95.html public class moneyTest{ public static void main(String[] args) { String str = ""; String di[] = {"","拾","百","千","万","亿"}; String unum[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; int n=0;//判断是否过十万 int y = 0;////判断是否过亿 int i = 1; int lastnum = 0;//保存上一个位数 int num = 1000001011;//要转换的数 int a[]=new int[14]; boolean flag=true; boolean flag2=true;//判断万位是否都为0标志 boolean flag3=true; int num3 = num; while(flag3) { if((num3/10)==0) flag3=false; else flag3=true; a[i]= num3%10; num3 = num3/10; i++; } while(flag) { if(a[5]==0&&a[6]==0&&a[7]==0&&a[8]==0) flag2 = false;//判断万位是否都为0 if(n>=5){ n=1; } if((num%10)!=0){//判断中间是否有两个零 if(y==8) { str = "亿" + str; di[n]=""; } str = unum[num%10] + di[n] + str; } else { if(y==8)str = "亿" + str; else if(n==4&&flag2){ str = "万" + str; } else { if((lastnum%10)!=0) str = unum[num%10] + str; } } if((num/10)==0) flag=false; else flag=true; lastnum = num; num = num/10; n++; y++; } System.out.println(str); } }呵呵 import java.math.BigDecimal; public class ConvertNumber { /** 定义数组存放数字对应的大写 */ private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; /** 定义数组存放位数的大写 */ private final static String[] STR_MODIFY = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" }; /** * 转化整数部分 * * @param tempString * @return 返回整数部分 */ private static String getInteger(String tempString) { /** 用来保存整数部分数字串 */ String strInteger = null;// /** 记录"."所在位置 */ int intDotPos = tempString.indexOf("."); int intSignPos = tempString.indexOf("-"); if (intDotPos == -1) intDotPos = tempString.length(); /** 取出整数部分 */ strInteger = tempString.substring(intSignPos + 1, intDotPos); strInteger = new StringBuffer(strInteger).reverse().toString(); StringBuffer sbResult = new StringBuffer(); for (int i = 0; i < strInteger.length(); i++) { sbResult.append(STR_MODIFY[i]); sbResult.append(STR_NUMBER[strInteger.charAt(i) - 48]); } sbResult = sbResult.reverse(); replace(sbResult, "零拾", "零"); replace(sbResult, "零佰", "零"); replace(sbResult, "零仟", "零"); replace(sbResult, "零万", "万"); replace(sbResult, "零亿", "亿"); replace(sbResult, "零零", "零"); replace(sbResult, "零零零", "零"); /** 这两句不能颠倒顺序 */ replace(sbResult, "零零零零万", ""); replace(sbResult, "零零零零", ""); /** 这样读起来更习惯. */ replace(sbResult, "壹拾亿", "拾亿"); replace(sbResult, "壹拾万", "拾万"); /** 删除个位上的零 */ if (sbResult.charAt(sbResult.length() - 1) == '零' && sbResult.length() != 1) sbResult.deleteCharAt(sbResult.length() - 1); if (strInteger.length() == 2) { replace(sbResult, "壹拾", "拾"); } /** 将结果反转回来. */ return sbResult.toString(); } /** * 转化小数部分 例:输入22.34返回叁肆 * * @param tempString * @return */ private static String getFraction(String tempString) { String strFraction = null; int intDotPos = tempString.indexOf("."); /** 没有点说明没有小数,直接返回 */ if (intDotPos == -1) return ""; strFraction = tempString.substring(intDotPos + 1); StringBuffer sbResult = new StringBuffer(strFraction.length()); for (int i = 0; i < strFraction.length(); i++) { sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]); } return sbResult.toString(); } /** * 判断传入的字符串中是否有.如果有则返回点 * * @param tempString * @return */ private static String getDot(String tempString) { return tempString.indexOf(".") != -1 ? "点" : ""; } /** * 判断传入的字符串中是否有-如果有则返回负 * * @param tempString * @return */ private static String getSign(String tempString) { return tempString.indexOf("-") != -1 ? "负" : ""; } /** * 将一个数字转化为金额 * * @param tempNumber 传入一个double的变量 * @return 返一个转换好的字符串 */ public static String numberToChinese(double tempNumber) { java.text.DecimalFormat df = new java.text.DecimalFormat("#.#########"); String pTemp = String.valueOf(df.format(tempNumber)); StringBuffer sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) + getFraction(pTemp)); return sbResult.toString(); } public static String numberToChinese(BigDecimal tempNumber) { return numberToChinese(tempNumber.doubleValue()); } /** * 替代字符 * * @param pValue * @param pSource * @param pDest */ private static void replace(StringBuffer pValue, String pSource, String pDest) { if (pValue == null || pSource == null || pDest == null) return; /** 记录pSource在pValue中的位置 */ int intPos = 0; do { intPos = pValue.toString().indexOf(pSource); /** 没有找到pSource */ if (intPos == -1) break; pValue.delete(intPos, intPos + pSource.length()); pValue.insert(intPos, pDest); } while (true); } /** * @param args */ public static void main(String[] args) { System.out.println(numberToChinese(1230400567.8934)); } } 多敲代码,这句话怎么解? java 学生信息系统录入按钮代码问题 帮我编写一个程序将5 9 3 三个数,重新排列,得到一个最大三位数和一个最小三位数,并输出 正则问题! JRE就是JAVA虚拟机吗 ServerSocket编程问题,100分相送!! 为什么excle里面的数据插入到oracle 就多了""(在线等) 我想开发服务端程序,请问如何选择WEB服务器。 都是基础问题,白送分 在xslt中利用 contains(.,'ee')函数时怎样让该函数大小写不敏感! 请教,如何用java实现程序进程唯一? 请问用java语言怎么实现Tracert功能,先谢谢了。
使用 String.length 来判断后面的单位是什么。比如说.前一位就是元
然后用String.substring 来取数字跟中文字符兑换,建议兑换换算用字符串进行
import java.lang.Math;class money {
// 调试时用main函数
public static void main(String args[]) {
money mon = new money();
System.out.println(mon.NumToRMBStr(-11.11));
System.out.println(mon.NumToRMBStr(11.11));
} String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆",
"柒", "捌", "玖" }; String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟",
"亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万",
"拾", "佰", "仟" }; String PositiveIntegerToHanStr(String NumStr) { // 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零
String RMBStr = "";
boolean lastzero = false;
boolean hasvalue = false; // 亿、万进位前有数值标记
int len, n;
len = NumStr.length();
if (len > 15)
return "数值过大!";
for (int i = len - 1; i >= 0; i--) {
if (NumStr.charAt(len - i - 1) == ' ')
continue;
n = NumStr.charAt(len - i - 1) - '0';
if (n < 0 || n > 9)
return "输入含非数字字符!"; if (n != 0) {
if (lastzero)
RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零
// 除了亿万前的零不带到后面
// if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) //
// 如十进位前有零也不发壹音用此行
if (!(n == 1 && (i % 4) == 1 && i == len - 1)) // 十进位处于第一位不发壹音
RMBStr += HanDigiStr[n];
RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空
hasvalue = true; // 置万进位前有值标记 } else {
if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) // 亿万之间必须有非零值方显示万
RMBStr += HanDiviStr[i]; // “亿”或“万”
}
if (i % 8 == 0)
hasvalue = false; // 万进位前有值标记逢亿复位
lastzero = (n == 0) && (i % 4 != 0);
} if (RMBStr.length() == 0)
return HanDigiStr[0]; // 输入空字符或"0",返回"零"
return RMBStr;
} String NumToRMBStr(double val) {
String SignStr = "";
String TailStr = "";
long fraction, integer;
int jiao, fen; if (val < 0) {
val = -val;
SignStr = "负";
}
if (val > 99999999999999.999 || val < -99999999999999.999)
return "数值位数过大!";
// 四舍五入到分
long temp = Math.round(val * 100);
integer = temp / 100;
fraction = temp % 100;
jiao = (int) fraction / 10;
fen = (int) fraction % 10;
if (jiao == 0 && fen == 0) {
TailStr = "整";
} else {
TailStr = HanDigiStr[jiao];
if (jiao != 0)
TailStr += "角";
if (integer == 0 && jiao == 0) // 零元后不写零几分
TailStr = "";
if (fen != 0)
TailStr += HanDigiStr[fen] + "分";
} // 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分”
// if( !integer ) return SignStr+TailStr; return "¥" + SignStr + PositiveIntegerToHanStr(String.valueOf(integer))
+ "元" + TailStr;
}}
final static String[] MONEYUNIT = {"分","角","元","万","亿"};
final static String ZHENG = "整";
final static String[] MONEYMULTIPLE = {"","拾","佰","仟"}; public static String moneyConvertToCapital(String sMoney){
String sMoneyCapital = "";
String sMoneyCapitalZheng = "";
String[] dt=Conve.SplitString(sMoney,".");
int flagIndex = 0; //MONEYUNIT位置标识
if(dt==null||dt.length!=2) return "";
int length = dt[0].length();
if(length>12) return "数字太大!!!";
if(dt[1].length()>2)
dt[1] = dt[1].substring(0,2);
if(dt[1].length()<2)
dt[1] = String.valueOf(Integer.parseInt(dt[1])*10+100).substring(1); if(dt[1].equals("00")&&!dt[0].equals("0")) {//零分零角
flagIndex = 2;
sMoneyCapital = ZHENG;
} else if (dt[1].substring(1,2).equals("0")) {//零分
flagIndex = 1;
sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + MONEYUNIT[flagIndex];
flagIndex = 2;
} else { //非零分
sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(1,2))] + MONEYUNIT[flagIndex];
flagIndex = 1;
if ((dt[1].substring(0,1)).equals("0")) {//零角、非零分
sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + sMoneyCapital;
flagIndex = 2;
}else{ //非零角、非零分
sMoneyCapital = MONEYNUMBER[Integer.parseInt(dt[1].substring(0,1))] + MONEYUNIT[flagIndex] + sMoneyCapital;
flagIndex = 2;
}
}
if(!dt[0].equals("0")) {//整数位不为0
int iTemp = 0;
boolean flagSin = false;//是否出现1标志
boolean flagPre = false;//是否前一位出现0标志
int j = 4;
int m = 1;
int temp = 0;
int unit = 2;
boolean moneyUnit = false;
for(int i=length;i>=1;i--){
if(m%5==0){
m = 1;
iTemp = 0;
moneyUnit = true;
unit++;
}
temp = Integer.parseInt(dt[0].substring(i-1,i));
if((m%j)==1){//是个位
if(temp!=0){
if(moneyUnit){
// if(!flagPre)
sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
moneyUnit = false;
}
sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
flagSin = false;
flagPre = false;
}else{
if(i==length) flagSin = true;
flagPre = true;
}
}else{//不是个位
if(temp==0){
if(!flagPre){
sMoneyCapitalZheng = MONEYNUMBER[0] + sMoneyCapitalZheng;
}else{
}
flagPre = true;
}else{
if(moneyUnit){
if(!flagPre)
sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
else if(flagPre&&!flagSin)
sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
else if(flagPre&&flagSin)
sMoneyCapitalZheng = MONEYUNIT[unit] + sMoneyCapitalZheng ;
// unit++;
moneyUnit = false;
sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
flagSin = false;
flagPre = false;
}else{
if(!flagPre){
sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
}else{
sMoneyCapitalZheng = MONEYNUMBER[temp] + MONEYMULTIPLE[iTemp] + sMoneyCapitalZheng;
}
flagPre = false;
flagSin = false;
}
}
}
iTemp++;
m++;
}
}
if(!sMoneyCapitalZheng.equals(""))
return sMoneyCapitalZheng + MONEYUNIT[2] + sMoneyCapital;
else
return sMoneyCapital;
} public static String billNo(int billno,int len){
if(billno>100000) return "单据超过5位!!!";
long date=System.currentTimeMillis();
java.sql.Date today = new java.sql.Date(date);
String[] dt=Conve.SplitString(String.valueOf(today),"-");
if (dt==null||dt.length!=3) return null;
String result = dt[0]+dt[1];
result = result + String.valueOf(len+billno).substring(1);
return result; } //用","拆分金额数(三位一撇,如"4826111.26"-->4,826,111.26)
public static final String splitFeeAmount(String str) {
String str1=str;
String str2="";
String str3="";
if (str.indexOf(".")>0) {
str1=str.substring(0,str.indexOf("."));
str2=str.substring(str.indexOf("."));
}
while (str1.length()>3) {
str3=","+str1.substring(str1.length()-3)+str3;
str1=str1.substring(0,str1.length()-3);
}
str=str1+str3+str2;
return str;
}
public static void main(String args[]){
System.out.println("value is : " + moneyConvertToCapital("4028.9"));
System.out.println("billno is : " + billNo(11,100000));
}}
public class moneyTest
{
public static void main(String[] args)
{
String str = "";
String di[] = {"","拾","百","千","万","亿"};
String unum[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
int n=0;//判断是否过十万
int y = 0;////判断是否过亿
int i = 1;
int lastnum = 0;//保存上一个位数
int num = 1000001011;//要转换的数
int a[]=new int[14];
boolean flag=true;
boolean flag2=true;//判断万位是否都为0标志
boolean flag3=true;
int num3 = num;
while(flag3)
{
if((num3/10)==0)
flag3=false;
else
flag3=true;
a[i]= num3%10;
num3 = num3/10;
i++;
}
while(flag)
{
if(a[5]==0&&a[6]==0&&a[7]==0&&a[8]==0)
flag2 = false;//判断万位是否都为0
if(n>=5){
n=1;
}
if((num%10)!=0){//判断中间是否有两个零
if(y==8)
{
str = "亿" + str;
di[n]="";
}
str = unum[num%10] + di[n] + str;
}
else
{
if(y==8)str = "亿" + str;
else if(n==4&&flag2){
str = "万" + str;
}
else
{
if((lastnum%10)!=0)
str = unum[num%10] + str;
}
} if((num/10)==0)
flag=false;
else flag=true;
lastnum = num;
num = num/10;
n++;
y++;
}
System.out.println(str);
}
}呵呵
public class ConvertNumber {
/** 定义数组存放数字对应的大写 */
private final static String[] STR_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
/** 定义数组存放位数的大写 */
private final static String[] STR_MODIFY = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟" };
/**
* 转化整数部分
*
* @param tempString
* @return 返回整数部分
*/
private static String getInteger(String tempString) {
/** 用来保存整数部分数字串 */
String strInteger = null;//
/** 记录"."所在位置 */
int intDotPos = tempString.indexOf(".");
int intSignPos = tempString.indexOf("-");
if (intDotPos == -1)
intDotPos = tempString.length();
/** 取出整数部分 */
strInteger = tempString.substring(intSignPos + 1, intDotPos);
strInteger = new StringBuffer(strInteger).reverse().toString();
StringBuffer sbResult = new StringBuffer();
for (int i = 0; i < strInteger.length(); i++) {
sbResult.append(STR_MODIFY[i]);
sbResult.append(STR_NUMBER[strInteger.charAt(i) - 48]);
}
sbResult = sbResult.reverse();
replace(sbResult, "零拾", "零");
replace(sbResult, "零佰", "零");
replace(sbResult, "零仟", "零");
replace(sbResult, "零万", "万");
replace(sbResult, "零亿", "亿");
replace(sbResult, "零零", "零");
replace(sbResult, "零零零", "零");
/** 这两句不能颠倒顺序 */
replace(sbResult, "零零零零万", "");
replace(sbResult, "零零零零", "");
/** 这样读起来更习惯. */
replace(sbResult, "壹拾亿", "拾亿");
replace(sbResult, "壹拾万", "拾万");
/** 删除个位上的零 */
if (sbResult.charAt(sbResult.length() - 1) == '零' && sbResult.length() != 1)
sbResult.deleteCharAt(sbResult.length() - 1);
if (strInteger.length() == 2) {
replace(sbResult, "壹拾", "拾");
}
/** 将结果反转回来. */
return sbResult.toString();
}
/**
* 转化小数部分 例:输入22.34返回叁肆
*
* @param tempString
* @return
*/
private static String getFraction(String tempString) {
String strFraction = null;
int intDotPos = tempString.indexOf(".");
/** 没有点说明没有小数,直接返回 */
if (intDotPos == -1)
return "";
strFraction = tempString.substring(intDotPos + 1);
StringBuffer sbResult = new StringBuffer(strFraction.length());
for (int i = 0; i < strFraction.length(); i++) {
sbResult.append(STR_NUMBER[strFraction.charAt(i) - 48]);
}
return sbResult.toString();
}
/**
* 判断传入的字符串中是否有.如果有则返回点
*
* @param tempString
* @return
*/
private static String getDot(String tempString) {
return tempString.indexOf(".") != -1 ? "点" : "";
}
/**
* 判断传入的字符串中是否有-如果有则返回负
*
* @param tempString
* @return
*/
private static String getSign(String tempString) {
return tempString.indexOf("-") != -1 ? "负" : "";
}
/**
* 将一个数字转化为金额
*
* @param tempNumber 传入一个double的变量
* @return 返一个转换好的字符串
*/
public static String numberToChinese(double tempNumber) {
java.text.DecimalFormat df = new java.text.DecimalFormat("#.#########");
String pTemp = String.valueOf(df.format(tempNumber));
StringBuffer sbResult = new StringBuffer(getSign(pTemp) + getInteger(pTemp) + getDot(pTemp) + getFraction(pTemp));
return sbResult.toString();
}
public static String numberToChinese(BigDecimal tempNumber) {
return numberToChinese(tempNumber.doubleValue());
}
/**
* 替代字符
*
* @param pValue
* @param pSource
* @param pDest
*/
private static void replace(StringBuffer pValue, String pSource, String pDest) {
if (pValue == null || pSource == null || pDest == null)
return;
/** 记录pSource在pValue中的位置 */
int intPos = 0;
do {
intPos = pValue.toString().indexOf(pSource);
/** 没有找到pSource */
if (intPos == -1)
break;
pValue.delete(intPos, intPos + pSource.length());
pValue.insert(intPos, pDest);
} while (true);
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(numberToChinese(1230400567.8934));
}
}