} Io.java 如下:public class Io { public String bigWriter(char c,String t) { switch (c) { case '0': t=t+"零"; break; case '1': t=t+"壹"; break; case '2': t=t+"贰"; break; case '3': t=t+"叁"; break; case '4': t=t+"肆"; break; case '5': t=t+"伍"; break; case '6': t=t+"陆"; break; case '7': t=t+"柒"; break; case '8': t=t+"捌"; break; case '9': t=t+"氿"; break;
import java.text.DecimalFormat; /**
* 小写金额转换大写金额
* @author Lucky & Ryan
*/
public class ChnAmt
{
private String[] saChnAmount = new String[50];
private int iArrayLen = 0;
private int iArrayPos = 0; /**
* 构造-小写金额转换大写对象(不带参)
* @param String sAmount
*/
public ChnAmt( String sAmount ) {
int iDecFrac = 0; if ( sAmount.indexOf( ". " ) != -1 ) {
iDecFrac = sAmount.length() - sAmount.indexOf( ". " );
if ( iDecFrac > 3 ) {
iDecFrac = 3;
}
sAmount = sAmount.substring( 0, sAmount.indexOf( ". " ) )
+ sAmount.substring( sAmount.indexOf( ". " ) + 1, sAmount.indexOf( ". " ) + iDecFrac );
for ( ; iDecFrac < 3; iDecFrac++ ) {
sAmount += "0 ";
}
} else {
sAmount += "00 ";
} toChnAmt( sAmount, 2, false );
}
/**
* 构造-小写金额转换大写对象(带参)
* @param String sAmount
* @param int iDec
* @param boolean bDot
*/
public ChnAmt( String sAmount, int iDec, boolean bDot ) {
if ( bDot ) {
if ( sAmount.indexOf( ". " ) < 0 ) {
// 没有小数点
sAmount += ". ";
for ( int iFor = iDec; iFor > 0; iFor-- ) {
sAmount += "0 ";
}
} else {
int iDecLen = sAmount.length() - sAmount.indexOf( ". " ) - 1 ;
if ( iDecLen > iDec ) {
// 去位
sAmount = sAmount.substring( 0, sAmount.indexOf( ". " ) + iDec + 1 );
} else if ( iDecLen < iDec ) {
// 补零
for ( int iFor = iDec - iDecLen; iFor > 0; iFor-- ) {
sAmount += "0 ";
}
}
}
}
toChnAmt( sAmount, iDec, bDot );
} /**
* 小写金额转换大写
* @param String sAmount
* @param int iDec
* @param boolean bDot
*/
public void toChnAmt( String sAmount, int iDec, boolean bDot ) {
// 数字
final String [] sUserCode = { "零 ", "壹 ", "贰 ", "叁 ", "肆 ", "伍 ", "陆 ", "柒 ", "捌 ", "玖 " };
// 单位
final String [] sChnUnit = { "厘 ", "分 ", "角 ", "元 ", "十 ", "百 ", "千 ", "万 ", "十 ", "百 ", "千 ", "亿 ", "十 ", "百 ", "千 ", "万 "};
// 整
final String sSpecEnd = "整 ";
// 标志
// '9 '代表十
// '3 ' - '元 ', '1 ' - '万 '( 如遇前一生成字符为 '亿 ',则不生成 '万 ' ), '3 ' - '亿 '
// '0 ' - 其他
final byte [] byFlag = { 0, 0, 0, 3, 9, 0, 0, 1, 9, 0, 0, 3, 9, 0, 0, 0 }; int iCounter, iPos;
byte byPreFlag=-1;
char cDigit, cPreDigit= ' '; iArrayLen = 0; switch ( iDec ) {
// 补零
case 0:
sAmount += "0 ";
case 1:
sAmount += "0 ";
case 2:
sAmount += "0 ";
case 3:
break;
default:
sAmount = sAmount.substring(0,sAmount.length()-iDec + 3) ;
} if ( bDot ) {
// 转换小数点
sAmount = sAmount.substring(0,sAmount.length()-4 ) + sAmount.substring(sAmount.length()-3 );
} // 开始转换
for( iCounter=sAmount.length() ; iCounter> 0; iCounter--)
{
// 计算数字位置
iPos = sAmount.length() - iCounter;
// 获得数字字符
cDigit = sAmount.charAt(iPos); // 过滤数字
if ( cDigit < '0 ' || cDigit> '9 ' ) cDigit = '0 '; if ( cDigit != '0 ' ) {
// 当前数字不为 '0 '
if ( cPreDigit == '0 ' ) {
// 前一数字为 '0 '
if ( byPreFlag != 3 && byPreFlag != 1 ) {
// '亿 ', '万 ', '元 ' 后不加 '零 '
saChnAmount[ ++iArrayLen ] = sUserCode[ 0 ];
}
} if ( cDigit == '1 ' && byFlag[iCounter-1] == 9 && iArrayLen == 0 ) {
// 数字为 '1 ',单位为 '十 ',且为第一个数字时,不报 '1 ',只报 '十 '
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
} else {
// 生成数字
saChnAmount[ ++iArrayLen ] = sUserCode[ Character.digit( cDigit, 10 ) ];
// 生成单位
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ]; // 记录当前位标志
byPreFlag = byFlag[iCounter-1];
}
} else {
// 数字为 '0 '
if ( iArrayLen == 0 ) {
// 过滤首位 '0 '
continue;
} else {
if ( byFlag[iCounter-1] == 3 || ( byFlag[iCounter-1]==1 && byPreFlag!=3 && !saChnAmount[ iArrayLen ].equals( sChnUnit[ 11 ] ) ) ) {
// 生成 '亿 ', '万 ', '元 '的单位,但如果从 '千万 '位到 '万 '位都为0,则不生成 '万 '
saChnAmount[ ++iArrayLen ] = sChnUnit[ iCounter - 1 ];
}
// 记录当前位标志
byPreFlag = byFlag[iCounter-1];
}
} // 记录当前数字
cPreDigit = cDigit;
} if ( iArrayLen == 0 ) {
// 转换结束数组长度为0,生成 '0元整 '
saChnAmount[ ++iArrayLen ] = sUserCode[ 0 ];
saChnAmount[ ++iArrayLen ] = sChnUnit[ 3 ];
saChnAmount[ ++iArrayLen ] = sSpecEnd;
} if ( saChnAmount[ iArrayLen ].equals( sChnUnit[ 3 ] ) ) {
// 最后位为 '元 ',加上 '整 '
saChnAmount[ ++iArrayLen ] = sSpecEnd;
} } /**
* 判断是否还有下一个转换元素
* @return boolean
*/
public boolean next() {
boolean bRtn = false; if ( iArrayPos++ < iArrayLen ) {
bRtn = true;
}
return bRtn; } /**
* 获取当前转换元素
* @return String
*/
public String getResult() {
String sRtn = " "; sRtn = saChnAmount[ iArrayPos ]; return sRtn;
} /**
* 转换double到String
* @param double dMoney
* @return String
*/
public static String Double2String( double dMoney ) {
String sMoney = " "; DecimalFormat df = new DecimalFormat( "############.### " );
try {
sMoney = df.format( dMoney );
} catch ( Exception e ) {
sMoney = " ";
} return sMoney;
} public static void main( String [] sArgv )
{
ChnAmt chnAMT ; chnAMT = new ChnAmt( "936.00 "); System.out.println( "ChnAmt() [936.00] to " ); while( chnAMT.next() )
{
System.out.println( "Value[ " + chnAMT.getResult() + "] " );
}
}
}
Big.java如下:
import java.util.*;
public class Big {
public static void main(String[] args)
{ Scanner sc=new Scanner(System.in);
String i=sc.nextLine();
io io =new io();
String t="";
int m=0; //让其进行两次循环,先整数后小数
int sr=0;
StringTokenizer st=new StringTokenizer(i,".");//用点分割
while(st.hasMoreTokens())
{
String nt=st.nextToken();
int n=nt.length();
sr=n-1;
if(m==0) //对整数部分的执行
{ //m++;
while(n>0)
{ n--; char c=nt.charAt(sr-n);
if(n>=5&&n<8)
{
//m=0;
t=io.bigWriter(c, t);
t=io.smallWriter(n,t);
continue;
}else if(n>=8)
{
m=0;
t=io.bigWriter(c, t);
t=io.smallWriter(n,t);
continue;
}
t=io.bigWriter(c,t);
t=io.smallWriter(n,t);
}
}
else //对小数部分的执行
{
while(n>0)
{
n--;
char c=nt.charAt(1-n);
if(c=='0'&&(nt.charAt(1)=='0'))
{
System.out.println(t+"整");
return;
}
t=io.bigWriter(c,t);
if(n==1)
t=t+"角";
else if(n==0)
{
t=t+"分";
}else
{
System.out.println("输入有误");
return;
}
}
}
}
System.out.print(t);
}
}
Io.java 如下:public class Io {
public String bigWriter(char c,String t)
{
switch (c)
{
case '0':
t=t+"零";
break;
case '1':
t=t+"壹";
break;
case '2':
t=t+"贰";
break;
case '3':
t=t+"叁";
break;
case '4':
t=t+"肆";
break;
case '5':
t=t+"伍";
break;
case '6':
t=t+"陆";
break;
case '7':
t=t+"柒";
break;
case '8':
t=t+"捌";
break;
case '9':
t=t+"氿";
break;
}
return t;
}
public String smallWriter(int n ,String t)
{
if(n>=5&&n<8)
{
if(n==5)
t=t+"拾";
else if(n==6)
t=t+"佰";
else if (n==7)
t=t+"仟";
//System.out.print("qqqqqqqqqq");
}
else if(n>=8)
{
if(n==8)
t=t+"亿";
else if(n==9)
t=t+"拾";
else if (n==10)
t=t+"佰";
else if(n==11)
t=t+"仟";
else if(n==12)
t=t+"万";
}
else if(n==4)
t=t+"万";
else if(n==3)
t=t+"仟";
else if(n==2)
t=t+"佰";
else if(n==1)
t=t+"拾";
else if(n==0)
{
t=t+"元";
}else
{
System.out.println("输入有误1");
}
return t;
}
}
希望对你有帮助
static char [] units = new char [] {'\0','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万','拾','佰','仟'};
public static String convert(String number){
String [] sub = number.split("\\.");
if(sub.length<=0 || sub.length>2)throw new NumberFormatException("数字格式有误");
StringBuilder buff = new StringBuilder();
convertInteger(sub[0],buff);
if(sub.length==2){
buff.append("点");
convertFloat(sub[1],buff);
}
return buff.toString();
}
private static void convertFloat(String floatString, StringBuilder buff) {
char floatNums [] = floatString.toCharArray();
for(char ch : floatNums){
buff.append(nums[ch-'0']);
}
} private static void convertInteger(String intString, StringBuilder buff) {
char intNumbs [] = intString.toCharArray();
if(intNumbs.length<=0){
buff.append(nums[0]);
return;
}
for(int i=intNumbs.length-1;i>=0;i--){
if(intNumbs[i]!='0'){
buff.insert(0,nums[intNumbs[i]-'0']);
}else{
if(buff.length()>0 && buff.charAt(0)!=nums[0])buff.insert(0, nums[0]);
}
int unit = intNumbs.length-i-1;
if(unit<=0 || intNumbs[i]=='0')continue;
buff.insert(1,units[unit]);
}
} /**
* @param args
*/
public static void main(String[] args) {
System.out.println(convert("1009.168"));
}}