建立两数组String[] a={"","十","百","千","万","百万","千万","亿"};
          String[] b={"一","二",...........,"十"};
int i=10034;
然后分析String s=Integer.toString(i);
s.charAt(i)对应b
s.length()对应a
^_^,楼主试一试

解决方案 »

  1.   

    主要是得判断好多特殊的情况,就是这个比较麻烦
    String[] arr_BigUnit = {"万","亿"};
    String[] arr_Unit    = {"千","百","十",""};
    String[] arr_ChNum   = {"零","一","二","三","四","五","六","七","八","九"};
    俺用的是三个数组
      

  2.   

    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() + "]" );
    }
    }
    }
      

  3.   

    gzlucky(Lucky) 做的不错收藏了