人民币大小写转换算法
1.先把你的金额转换成Chat String类型;
2.把Chat Strin类型的金额变量已小数点为界分成两个部分;
3.分别用两个转换函数对小数点左右部分进行转换
AnsiString ChineseNumber(AnsiString num) \
{
num.Delete(num.Length()-2,1);//删除小数点
num.Insert(num.StringOfChar('0',8-num.Length()),1);
AnsiString retval="",CNum=";零壹贰叁肆伍陆柒捌玖",CUnit=";拾万仟佰拾元角分";
for(int p,i=1;i<9;i++)
{
p=num.SubString(i,1).ToInt();
retval+=CNum.SubString(p*2+1,2)+CUnit.SubString(i*2-1,2);
}
return retval;
例2
1.先把你的金额转换成Chat String类型;
2.把Chat Strin类型的金额变量已小数点为界分成两个部分;
3.分别用两个转换函数对小数点左右部分进行转换
AnsiString ChineseNumber(AnsiString num)
{
num.Delete(num.Length()-2,1);//删除小数点
num.Insert(num.StringOfChar('0',8-num.Length()),1);
AnsiString retval="",CNum=";零壹贰叁肆伍陆柒捌玖",CUnit=";拾万仟佰拾元
角分";
for(int p,i=1;i<9;i++)
{
p=num.SubString(i,1).ToInt();
retval+=CNum.SubString(p*2+1,2)+CUnit.SubString(i*2-1,2);
}
return retval;
例3 金额大小写转换       
FUNCTION    UPPERRMB 
PARAMETER  RMB 
PRIVATE  UNIT,  NUMBER,  I,  RETVAR 
UNIT  =  ';分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟' 
NUMBER  =  ';零壹贰叁肆伍陆柒捌玖' 
RMB  =  INT(RMB*100+0.5) 
RETVAR  =  '' 
DO  WHILE  RMB>0 
RETVAR  =  SUBSTR(NUMBER,2*(MOD(RMB,10))+1,2)+LEFT(UNIT,2)+RETVAR 
RMB  =  INT(RMB/10) 
UNIT  =  SUBSTR(UNIT,3) 
ENDDO 
RETVAR  =  STRTRAN(RETVAR,';零仟',';零') 
RETVAR  =  STRTRAN(RETVAR,';零佰',';零') 
RETVAR  =  STRTRAN(RETVAR,';零拾',';零') 
RETVAR  =  STRTRAN(RETVAR,';零角',';零') 
DO  WHILE  ';零零'$RETVAR 
RETVAR  =  STRTRAN(RETVAR,';零零',';零') 
ENDDO 
RETVAR  =  STRTRAN(RETVAR,';零亿',';亿') 
RETVAR  =  STRTRAN(RETVAR,';零万',';万') 
RETVAR  =  STRTRAN(RETVAR,';亿万',';亿零') 
RETVAR  =  STRTRAN(RETVAR,';零零',';零') 
RETVAR  =  STRTRAN(RETVAR,';零圆',';圆') 
RETVAR  =  STRTRAN(RETVAR,';零分',';整') 
RETVAR  =  IIF(LEN(RETVAR)=0,';零圆整',RETVAR) 
RETURN  RETVAR
例4
//改编 inRm inrm@263 function NumToChar( n:Real):
wideString; //可以到万亿,并可随便扩大
const cNum:WideString=‘零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分‘;
cCha:array[0..1, 0..11]of string = (( ‘零仟‘,‘零佰‘,‘零拾‘,‘零零零‘,‘零零‘, ‘零亿‘,‘零万‘,‘零元‘,‘亿万‘,‘零角‘,‘零分‘
,‘零整‘), ( ‘零‘,‘零‘,‘零‘,‘零‘,‘零‘,‘亿‘,‘万‘,‘元‘,‘亿‘,‘零‘,‘整‘,‘整‘));
var i :Integer;
sNum :WideString; begin result := ‘‘; sNum := FormatFloat(‘0‘,n*100); for i := 1 to Length(sNum) do result := result + cNum[ord(sNum[i])-47] + cNum[26-Length(s
Num)+i];
for i:= 0 to 11 do //去掉多余的零
result := StringReplace(result, cCha[0,i], cCha[1,i], [rfReplaceAll]);
end;
例5. JAVA算法
package amountchange; 
import java.math.BigDecimal; 
CORBA.TRANSIENT;     
public class AmountChange2RMB { 
private static String bigLetter[] = { ";零", ";壹", ";贰", ";叁", ";肆", ";伍", ";陆", 
";柒", ";捌", ";玖" };  private static String unit[] = { ";元", ";拾", ";佰", ";仟", ";万", ";拾", ";佰", ";仟", ";亿", ";拾", ";佰", ";仟", ";万" }; 
private static String unitSmall[] = { ";分", ";角" }; 
public static void main(String[] args) { 
String[] testStrs = { "1234567888888.100"/* 大十进制数 */, 
"1001"/* 没有小数,且含相邻的两个零 */, "101005.1"/*零在单位所处的位置*/, "1010"/*零在元位*/ }; 
System.out.println(new BigDecimal(testStrs[2]).toString()); 
System.out.println(trans(testStrs[2])); 
  } 
public static String trans(String str) { 
BigDecimal dec = check2BigDecimal(str); 
if (dec == null) 
return null; 
str = PlainString(); 
String[] sArr = str.split("\\."); 
String intOnly = sArr[0]; 
String smallOnly = ""; 
if (sArr.length == 2) 
smallOnly = sArr[1]; 
if (smallOnly.length() > 2) { 
smallOnly = smallOnly.substring(0, 2); 
return transInt(intOnly) + transSmall(smallOnly); 
public static String transInt(String str) { 
if ("0".equals(str)) 
return ""; 
StringBuffer newS = new StringBuffer(); 
char[] cArr = CharArray(); 
for (int i = 0; i < cArr.length; i++) { 
String u = unit[cArr.length - i - 1]; 
int position = ";元万亿".indexOf(u); 
// 遇到零,特殊处理 
if (cArr[i] == '0') { 
/
/ 如果零在特殊位置上:比如个位,万位,亿位 
if (position >= 0) { 
// 如果零在个位:需要加上单位“元” 
if (position == 0) { 
newS.append(unit[cArr.length - i - 1]); 
continue; 
} else {// 如果零不在个位 
// 零不在个位,且这个位后,紧跟着一个零:只需要加上单位 
if (i < cArr.length - 1 && cArr[i + 1] == '0') { 
newS.append(unit[cArr.length - i - 1]); 
continue; 
}
else {// 零不在个
位,且这个位后,没有紧跟着一个零:需要加上单位和大写数字(注意次序:单位在前,大写数字在后) 
newS.append(unit[cArr.length - i - 1]); 
newS.append(bigLetter[cArr[i] - 48]); 
continue; 
}
else {// 零不在特殊位置上 
// 零不在特殊位置上,且这个位后,紧跟着一个零:忽略这个零 
if (i < cArr.length - 1 && cArr[i + 1] == '0') {  continue;  } 
// 零不在特殊位置上,且这个位后,没有紧跟着一个零:需要加上大写数字 
newS.append(bigLetter[cArr[i] - 48]); 
continue;    } 
// 不是零,常规处理 
newS.append(bigLetter[cArr[i] - 48]); 
newS.append(unit[cArr.length - i - 1]); 
String(); 
public static String transSmall(String str) { 
//因为最多精确到分,所有str的长度最多位2 
if (str == null || "".equals(str)) 
return ""; 
char[] cArr = CharArray(); 
if (str.indexOf("0") == -1) {//不含有零,常规处理 
StringBuffer newS = new StringBuffer(); 
for (int i = 0; i < cArr.length; i++) { 
newS.append(bigLetter[cArr[i] - 48]); 
newS.append(unitSmall[cArr.length - i - 1]); 
String(); 
}
else {//含有零,分情况考虑 
  if (cArr[0] == '0' && cArr[cArr.length == 2 ? 1 : 0] == '0')
  //两个都为零 
return ""; 
  if (cArr[0] == '0' && cArr.length == 2 && cArr[1] != '0')
  //角位为零,分位不为零 
return bigLetter[0] + bigLetter[cArr[1] - 48] + unitSmall[0]; 
if (cArr[0] != '0' && cArr.length == 2 && cArr[1] == '0')
//分位为零,角位不为零 
return bigLetter[cArr[0] - 48] + unitSmall[1]; 
return ""; 
public static BigDecimal check2BigDecimal(String str) { 
try { 
double f = Double.valueOf(str);// 0.0 0.1 -5 "" 
if (f < 0) 
System.out.println(";输入数据小于0,请检查!"); 
return new BigDecimal(f); 
}
catch (NumberFormatException e) { 
e.printStackTrace(); 
return null; 
}
public class NumToChinese { 
public static String NumberToChinese(String input){ 
String s1=";零壹贰叁肆伍陆柒捌玖"; 
String s4=";分角整元拾佰仟万拾佰仟亿拾佰仟"; 
String temp=""; 
String result=""; 
if (input==null) return ";输入的字串不是数字串只能包括以下字符('0'~'9','.'),输入字串最大只能精确到仟亿,小数点只能两位!"; 
im(); 
float f; 
try{ 
f=Float.parseFloat(temp); 
}catch(Exception e){ 
return ";输入的字串不是数字串只能包括以下字符('0'~'9
','.'),输入字串最大只能精确到仟亿,小数点只能两位!"; 
int len=0; 
if(temp.indexOf(".")==-1) len=temp.length(); 
else len=temp.indexOf(
"."); 
if(len>s4.length()-3) return(";输入字串最大只能精确到仟亿,小数点只能两位!"); 
int n1=0; 
String num=""; 
String unit=""; 
for(int i=0;i<temp.length();i++){ 
if(i>len+2){break;} 
if(i==len) {continue;} 
n1=Integer.parseInt(String.valueOf(temp.charAt(i))); 
num=s1.substring(n1,n1+1); 
n1=len-i+2; 
unit=s4.substring(n1,n1+1); 
at(num).concat(unit); 
if((len==temp.length())||(len==temp.length()-1)) at(";整"); 
if(len==temp.length()-2) at(";零分"); 
return result; 
例6 JAVA算法
public class NumToChinese {
public static String NumberToChinese(String input){
String s1=";零壹贰叁肆伍陆柒捌玖";
String s4=";分角整元拾佰仟万拾佰仟亿拾佰仟";
String temp="";
String result="";
if (input==null) return ";输入的字串不是数字串只能包括以下字符('0'~'9','.'),输入字串最大只能精确到仟亿,小数点只能两位!";
im();
float f;
try{
f=Float.parseFloat(temp);
}catch(Exception e){
return ";输入的字串不是数字串只能包括以下字符('0'~'9','.'),输入字串最大只能精确到仟亿,小数点只能两位!";
}
int len=0;
if(temp.indexOf(".")==-1) len=temp.length();
else len=temp.indexOf(".");
if(len>s4.length()-3) return(";输入字串最大只能精确到仟亿,小数点只能两位!");
int n1=0;
String num="";
String unit="";
for(int i=0;i<temp.length();i++){
if(i>len+2){break;}
if(i==len) {continue;}
n1=Integer.parseInt(String.valueOf(temp.charAt(i)));
num=s1.substring(n1,n1+1);
n1=len-i+2;
unit=s4.substring(n1,n1+1);
at(num).concat(unit);
}
if((len==temp.length())||(len==temp.length()-1)) at(";整");
if(len==temp.length()-2) at(";零分");
return result;
}
}
例7
import  DecimalFormat; 
public  class  helloworld  {
public  static  void  main(String[]  args)  {
//  TODO  自动生成方法存根
double  inputvalue  =  1234567890123.312030;
if(inputvalue  ==  0)  {
System.out.print( ";零 ");
return;
}
String  stringvalue,sintvalue,sdecvalue;
DecimalFormat  ss  =  new  DecimalFormat( "0.00 ");
stringvalue  =  ss.format(inputvalue);
int  decbit;
decbit  =  stringvalue.indexOf( ". ");
if(decbit  ==  0){
sintvalue  =  stringvalue;
sdecvalue  = 
" ";
}
else{
sintvalue  =  stringvalue.substring(0,decbit);
sdecvalue  =  stringvalue.substring(decbit  +  1);
}
String  chesenumunit[]  =  { " ", ";壹 ", ";贰 ", ";叁 ", ";肆 ", ";伍 ", ";陆 ", ";柒 ", ";捌 ", ";玖 "};
helloworld  hwtochn  =  new  helloworld();
//处理整数
String  schar,sreversed,schnintvalue= " ",schndecvalue= " ";
int  ibit;
StringBuffer  s=new  StringBuffer(sintvalue);
sreversed  =  s.reverse().toString();
for(int  i=  0;i <sreversed.length();i++) 
{
schar  =  sreversed.substring(i,  i+1);
ibit  =  Integer.parseInt(schar);
schnintvalue  =  chesenumunit[ibit]  +  hwtochn.GetUnit(i)  +schnintvalue;
}
//清除多余的单位
String  slist  =  ";拾佰仟万亿 ";
for(int  i=  schnintvalue.length()-1;i> =0;i--) 
{
schar  =  schnintvalue.substring(i,  i+1);
if(slist.indexOf(schar)> =0)
{
for(int  j  =  i-1;j> =0;j--)
{
String  shighchar;
shighchar  =  schnintvalue.substring(j,  j+1);
if(slist.indexOf(shighchar) <0)
{
break;
}
else  if(slist.indexOf(shighchar,slist.indexOf(schar)+1)> =0)
{
schnintvalue  =  schnintvalue.substring(0,i)+schnintvalue.substring(i+1);
break;
}  }  }  }
schnintvalue  =  schnintvalue  + ";圆 ";
//处理小数
ibit  =  Integer.parseInt(sdecvalue.substring(0,1));
if  (ibit  >  0) 
schndecvalue  =  chesenumunit[ibit]  +  ";角 ";
ibit  =  Integer.parseInt(sdecvalue.substring(1,2));
if  (ibit  >  0) 
schndecvalue  =  schndecvalue  +  chesenumunit[ibit]  +  ";分 ";
String  schnnum;
schnnum  =  schnintvalue  +  schndecvalue+ ";整 ";
System.out.print(stringvalue+schnnum);
}
public  String  GetUnit(int  num)  {
//取单位  非零数字按位数取单位
int  level;
level  =  num%4;
switch(level)  {
case  0:  if(num  ==  0)  return  " ";
bigdecimal转换为integer
else if(num%8  ==  0) 
return  ";亿 "; 
else  return  ";万 ";
case  1:  return  ";拾 ";
case  2:  return  ";佰 ";
case  3:  return  ";仟 ";
default:  return  " ";
}  }  } 
例8  jsp页面调用applet实现人民币的大小写转换
实现方法一
applet实现页面是rmb.jsp,此页面是通过applet来实现人民币小写转换成大写的。此页面有三个变量需要在载入classes的时候进行初始化:
<applet  type="applet" id="myApplet" codebase = "." name="TestApplet"
align="middle" code="b.Applicate.Rmb.class"
width="560" height="25">
<param name="RGB_Back" value="241|247|251">
&

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。