求一个金额小写转大写的代码.我自己尝试写了下,虽然能实现,但感觉太繁琐了,就不发出来丢人现眼了.各位高手提供个下自己的方法哈 ,谢谢.

解决方案 »

  1.   

    网上我看了几个 感觉没有太满意的public class Moneytransform {
    private static final String[] gz={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","圆","角","分"};
    private static final String[] cap={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    private static final String[] low={"0","1","2","3","4","5","6","7","8","9"};

    public static String getMoney(String sValue){
    //检查输入的是否为纯数字
    if(!sValue.matches("^[0-9\\.]+$")){
    System.out.println("非法输入,请更正");
    return "";
    }
    String sStart="";
    String sResult="";
    String s=sValue+".00";
    int npoint=s.indexOf(".");//找出输入字符串中字符"."的位置
    //将数字字符串拼凑成完整格式,如23.14转换为2314 , 23则转换为2300
    if (npoint==-1){
    sStart=s;
    }else{
    sStart=s.substring(0, npoint)+s.substring(npoint+1,npoint+1+2);
    }
    //检查数字是否超出范围,最大只到"仟亿"
    if(sStart.length()>gz.length){
    System.out.println("数字太大 超出范围 ,无法转换");
    return "";
    }
    //将字符串拆分成字符数组[]
    char[] temp=sStart.toCharArray();
    //将字符串的每个数字与其对应的数字位相结合,拼凑在一起
    String s3="";
    for(int i=0;i<temp.length;i++){
    sResult=sResult+temp[i]+gz[gz.length-temp.length+i];
    }
    //替换小写数字为大写数字
    for(int i=0 ;i< cap.length;i++){
    sResult=sResult.replaceAll(low[i], cap[i]);
    }
    //处理特殊情况
    sResult=sResult.replaceAll("零分", "分");
    sResult=sResult.replaceAll("零角", "零");
    sResult=sResult.replaceAll("零圆", "圆");
    sResult=sResult.replaceAll("零拾", "零");
    sResult=sResult.replaceAll("零佰", "零");
    sResult=sResult.replaceAll("零仟", "零");
    sResult=sResult.replaceAll("零万", "万");
    sResult=sResult.replaceAll("零亿", "亿");
    for(int i=0;i<sResult.length();i++){
    sResult=sResult.replaceAll("零零", "零");
    }
    sResult=sResult.replaceAll("零分", "");
    sResult=sResult.replaceAll("零角", "零");
    sResult=sResult.replaceAll("零圆", "圆");
    sResult=sResult.replaceAll("零拾", "零");
    sResult=sResult.replaceAll("零佰", "零");
    sResult=sResult.replaceAll("零仟", "零");
    sResult=sResult.replaceAll("零万", "万");
    sResult=sResult.replaceAll("零亿", "亿");
    sResult=sResult.replaceAll("壹拾", "拾");
    return sResult;
    }
    }
    这是我用java写的,之前好像在哪里看到过这样的写法,但没记住.
      

  2.   

    本帖最后由 bcrun 于 2010-12-16 09:35:47 编辑
      

  3.   

    本帖最后由 bcrun 于 2010-12-16 09:44:50 编辑
      

  4.   

    想要的话 可以给你一些 .wav
      

  5.   

    7F 图片的引思.....利用 API播放 .wav 方便快速且流畅,用系统带上的那个speech 老外说中文,有多烂就多烂, 下载科大语音自己制作剪辑, 声音甜美,一级棒,中文英文日文粤语都能制作
    9F 图片的引思.....用资源文件捆绑, 不必释放文件, 直接播放
      

  6.   


    tts 很烂吗?是不是设置的有问题啊?可以选择男、女等发声效果。
      

  7.   

    给你一个我写的搞笑版的,当然,你也可以自己改回严肃版的. 最大支持20位数.Private Function EnToCh1(ByVal En As String) As String
    Dim num As Double
    Dim I As Long
    Dim L As Long
    Dim M As Long
    Dim N As Long
    Dim Tmp As Double
    Dim CNum(23) As String
    Dim TmpNum() As String
    Dim TmpNum1() As String
    Dim TmpStr As String
    En = Trim(En)
    If Not IsNumeric(En) Then
       EnToCh1 = "DD"
       Exit Function
    End IfCNum(0) = "淋"
    CNum(1) = "鸭"
    CNum(2) = "矣"
    CNum(3) = "散"
    CNum(4) = "吸"
    CNum(5) = "呒"
    CNum(6) = "咯"
    CNum(7) = "切"
    CNum(8) = "疤"
    CNum(9) = "狗"
    CNum(10) = ""
    CNum(11) = "屎"
    CNum(12) = "摆"
    CNum(13) = "牵"
    CNum(14) = "园"
    CNum(15) = "腕"
    CNum(16) = "意"
    CNum(17) = "昭"
    CNum(18) = "精"
    CNum(19) = "疯"
    CNum(20) = "脚"
    CNum(21) = "令"
    CNum(22) = "证"
    CNum(23) = "妇"
    En = Trim(En)
    En = Replace(En, ",", "")
    TmpNum1 = Split(En, ".")
    If UBound(TmpNum1) > 1 Then
       EnToCh1 = "错误数字,多于一个小数点"
       Exit Function
    End IfI = Len(TmpNum1(0))
    If Left(TmpNum1(0), 1) = "-" Then
       TmpNum1(0) = Right(TmpNum1(0), I - 1)
       En = CNum(23)
       I = I - 1
    Else
       En = ""
    End If
    If I > 20 Then
       EnToCh1 = "数字太长,无法计算"
       Exit Function
    End IfM = I
    L = ((I - 1) \ 4)
    ReDim TmpNum(L)
    TmpStr = TmpNum1(0)
    For N = 0 To L
       TmpNum(N) = Right(TmpStr, 4)
       M = M - 4
       If M > 0 Then TmpStr = Left(TmpNum1(0), M)
    NextFor I = L To 0 Step -1
       Tmp = Val(TmpNum(I))
       For M = 3 To 0 Step -1
          N = (Tmp \ (10 ^ M)) Mod 10
          EnToCh1 = EnToCh1 & CNum(N) & CNum(M + 10)
       Next
       EnToCh1 = EnToCh1 & CNum(I + 14)
    NextFor L = 11 To 13
       EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(L), CNum(0))
       EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(0), CNum(0))
    Next
    For N = 0 To 2
       For L = 15 To 18
          EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(L), CNum(L))
       Next
          For I = 18 To 16 Step -1
          For L = I - 1 To 15 Step -1
             EnToCh1 = Replace(EnToCh1, CNum(I) & CNum(L), CNum(I) & CNum(0))
          Next
       Next
       EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(0), CNum(0))
    NextIf Left(EnToCh1, 1) = CNum(0) Then EnToCh1 = Right(EnToCh1, Len(EnToCh1) - 1)
    EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(14), CNum(14))If UBound(TmpNum1) > 0 Then
       TmpStr = Left(TmpNum1(1) & "0", 2)
       Tmp = Val(TmpStr)
       If Tmp = 0 Then
          EnToCh1 = EnToCh1 & CNum(22)
       Else
          For M = 1 To 0 Step -1
             N = (Tmp \ (10 ^ M)) Mod 10
             EnToCh1 = EnToCh1 & CNum(N) & CNum(M + 19)
          Next
       End If
    Else
       EnToCh1 = EnToCh1 & CNum(22)
    End If
    EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(19), "")
    EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(20), CNum(0))EnToCh1 = En & EnToCh1
    'By WallesCai lol
    End Function
    调用方法么:
    MSGBOX "2837465019" 就知道了.
    若要转载,请注明出处啊,哈哈
      

  8.   

    网上很多错误的,稍微改了一个
    Public Function toDaXie(dblNumber As Double) As String
        Dim i As Integer
        Dim hzNum(0 To 9), hzDig(0 To 14), strNum As String
        Dim HZ, NK, N1, N2 As String
        If dblNumber > 9999999999999.99 Then
            toDaXie = "#金额溢出!#"
            Exit Function
        End If
        If dblNumber = 0 Then
            toDaXie = "零元"
            Exit Function
        End If
        hzNum(0) = "零"
        hzNum(1) = "壹"
        hzNum(2) = "贰"
        hzNum(3) = "叁"
        hzNum(4) = "肆"
        hzNum(5) = "伍"
        hzNum(6) = "陆"
        hzNum(7) = "柒"
        hzNum(8) = "捌"
        hzNum(9) = "玖"
        
        hzDig(0) = "分"
        hzDig(1) = "角"
        hzDig(2) = "圆"
        hzDig(3) = "拾"
        hzDig(4) = "佰"
        hzDig(5) = "仟"
        hzDig(6) = "万"
        hzDig(7) = "拾"
        hzDig(8) = "佰"
        hzDig(9) = "仟"
        hzDig(10) = "亿"
        hzDig(11) = "拾"
        hzDig(12) = "佰"
        hzDig(13) = "仟"
        hzDig(14) = "万"
        
        strNum = Format(Round(dblNumber * 100))
        If dblNumber < 0 Then
            HZ = "负"
            strNum = Mid(strNum, 2)
        Else
            HZ = ""
        End If
        
        For i = 1 To Len(strNum)
            NK = Val(Mid(strNum, i, 1))
            N1 = hzNum(NK)
            N2 = hzDig(Len(strNum) - i)
            If NK = 0 And (N2 = "亿" Or N2 = "万" Or N2 = "圆") Then
                If Right(HZ, 1) = "零" Then
                    HZ = Left(HZ, Len(HZ) - 1)
                End If
                If Right(HZ, 1) = "亿" Then
                    If N2 = "圆" Then
                        N1 = N2
                        N2 = "零"
                    Else
                        N2 = ""
                    End If
                Else
                    N1 = N2
                    N2 = "零"
                End If
            ElseIf NK = 0 Then
                N1 = IIf(Right(HZ, 1) = "零", "", N1)
                If N2 = "分" Then
                    If Right(HZ, 1) <> "角" Then
                        HZ = Left(HZ, Len(HZ) - 1) & "整"
                        N1 = ""
                    End If
                End If
                N2 = ""
            End If
            HZ = HZ & N1 & N2
        Next
        
        If Right(HZ, 1) = "分" And Right(HZ, 2) = "圆整" Then
            HZ = Left(HZ, Len(HZ) - 1) & "角"
        Else
            If Right(HZ, 1) = "零" Then
                HZ = Left(HZ, Len(HZ) - 1)
            End If
        End If
        toDaXie = HZ
    End Function
      

  9.   

    我写的这个,可以一边输入,以便念出声音'**********念金额的情况******************
        '十个数字0-9
        Case "零"
        MMControl1.From = lingstart:
        MMControl1.To = lingend
        MMControl1.Command = "play"
        Sleep (500)
        Case "壹"
        MMControl1.From = onestart:
        MMControl1.To = oneend
        MMControl1.Command = "play"
    Sleep (500)
        Case "贰"
        
        MMControl1.From = twostart:
        MMControl1.To = twoend
        MMControl1.Command = "play"
    Sleep (500)
      

  10.   

    http://hiphotos.baidu.com/cxy5636917/pic/item/9978c9823c7bf4ddf703a65c.jpg
      

  11.   


    cxy5636917 使用自己的空间 百度空间的图片是没法链接的
      

  12.   

    不过似乎通用,象MB,GB,TB(硬盘容量常用)