用oracle 写一个金额大小写转换的函数

解决方案 »

  1.   

    http://www.csdn.net/develop/Read_Article.asp?Id=20075
      

  2.   

    给你一段我写的VB.Net代码:
       '转换金额为大写
        Private Function getChinese(ByVal arab As String) As String
            Select Case arab
                Case "0"
                    Return "零"
                Case "1"
                    Return "壹"
                Case "2"
                    Return "贰"
                Case "3"
                    Return "叁"
                Case "4"
                    Return "肆"
                Case "5"
                    Return "伍"
                Case "6"
                    Return "陆"
                Case "7"
                    Return "柒"
                Case "8"
                    Return "捌"
                Case "9"
                    Return "玖"
            End Select
        End Function
        Private Function ConvertToChinese(ByVal dblJE As Decimal) As String
            Try
                Dim value As String
                value = Format(dblJE, "##########################.00")
                value = Replace(value, ".", "")
                Dim dw(17) As String
                dw(0) = "分"
                dw(1) = "角"
                dw(2) = "元"
                dw(3) = "拾"
                dw(4) = "佰"
                dw(5) = "仟"
                dw(6) = "万"
                dw(7) = "拾"
                dw(8) = "佰"
                dw(9) = "仟"
                dw(10) = "亿"
                dw(11) = "拾"
                dw(12) = "佰"
                dw(13) = "仟"
                dw(14) = "万"
                dw(15) = "拾"
                dw(16) = "佰"
                dw(17) = "仟"
                Dim Stack1 As New Stack()
                Dim stack2 As New Stack()
                Dim I As Integer            For I = value.Length To 1 Step -1
                    Stack1.Push(Mid(value, I, 1))
                    stack2.Push(dw(value.Length - I))
                Next            Dim str As String
                While Stack1.Count > 0
                    Dim a As String
                    a = Stack1.Pop()
                    If a <> "0" Then
                        str = str & getChinese(a) & stack2.Pop()
                    Else
                        If Stack1.Count > 0 Then
                            Dim b As String
                            b = stack2.Pop()
                            If b = "亿" Or b = "万" Or b = "元" Then
                                str = str & b
                            End If
                            If Stack1.Peek() <> "0" Then
                                str = str & getChinese(a)
                            End If
                        Else
                            stack2.Pop()
                        End If
                    End If
                End While
                If str.Substring(str.Length - 1, 1) <> "分" Then
                    str = str & "整"
                End If
                Return str
            Catch exp As Exception
                MsgBox("转换成大写金额失败:" & Chr(13) & exp.ToString, MsgBoxStyle.Critical, "错误")
                Return ""
            End Try
        End Function
        '获得大写金额
        Private Function getDXJE(ByVal obj As Object) As String
            If IsDBNull(obj) Then
                Return ""
            Else
                If IsNumeric(obj) Then
                    Return ConvertToChinese(obj)
                Else
                    Return ""
                End If
            End If
        End Function
      

  3.   

    我写的一个程序 但是 存在00问题,而且不是很强壮,小数点还没有处理。
    希望高手提供一个解决00问题的思路。declarein_str varchar2(15):='440066.00'; -- 输入字符
    out_str varchar2(50);
    str_bing varchar2(50);
    time_str varchar2(50);
    loop_nunber integer:=0;
    toatal integer:=0;
    length_number integer:=length(in_str); -- 计算字符长度
    point integer:=null;
    begin  for i in 1..length_number loop
       out_str:=substr(in_str,i,1); -- 一个一个字符输出
       toatal:=toatal+1;
       DBMS_OUTPUT.PUT_LINE('the str is 第一次循环 '|| '"' || out_str || '"' || i );
       
       if out_str = '.' then  --判断是否有小数点,如果有计算出第几位的位     
          point:=i;           --如果没有point为空
         
       else 
          point:=0;
          
       end if;   
          
       exit when out_str = '.'; -- 在出现小数点时跳出循环
          
      end loop   ;
      
      -- 如果不够12位的前面补“0”使得位数达到12位
      
      
      if point > 0 then 
        toatal:=toatal-1;
      end if;
      
      
      if  toatal = 12 then 
        loop_nunber := 12 ;
      elsif toatal < 12 then 
        loop_nunber := 12 - toatal;
        
        
         for i in 1..loop_nunber loop
             time_str:=time_str||'0';
         end loop;
        
        in_str:=time_str||in_str;
        
      end if ;
      dbms_output.put_line( ' in_str '||in_str||' 位');
      
         
          
     for i in 1..length(in_str) loop
     
       out_str:=substr(in_str,i,1); -- 一个一个字符输出
      
       DBMS_OUTPUT.PUT_LINE('the str is '|| '"' || out_str || '"' || i );
       
       if out_str = '1' then   --转换成中文大写          
            str_bing :=str_bing || '壹';
       elsif out_str = '2' then
            str_bing :=str_bing || '贰';
       elsif out_str = '3' then
            str_bing :=str_bing || '叁';
       elsif out_str = '4' then
            str_bing :=str_bing || '肆';
       elsif out_str = '5' then
            str_bing :=str_bing || '伍';
       elsif out_str = '6' then
            str_bing :=str_bing || '陆';
       elsif out_str = '7' then
            str_bing :=str_bing || '柒';
       elsif out_str = '8' then
            str_bing :=str_bing || '捌';
       elsif out_str = '9' then
            str_bing :=str_bing || '玖';
       elsif out_str = '0' then
            str_bing :=str_bing || '零';
       end if;
       
       exit when out_str = '.'; -- 在出现小数点时跳出循环
       
       
     end loop;
     DBMS_OUTPUT.PUT_LINE( ' 字符 ' || in_str || ' 的中文大写是 '|| str_bing  ); 
     dbms_output.put_line( ' 小数点是第 '||point||' 位');
     dbms_output.put_line( ' 小数点前共 '||toatal||' 位');
     
     --  加入单位
     time_str:=null;
     for i in 1..length(in_str) loop
     
       out_str:=substr(str_bing,i,1); -- 一个一个字符输出
       
       time_str:=time_str||out_str;  
       
       if i = 1 or i = 5 or i = 9 then 
         time_str:=time_str || '千';
       elsif i = 2 or i = 6 or i = 10 then 
         time_str:=time_str || '百';
       elsif i = 3 or i = 7 or i = 11 then 
         time_str:=time_str || '拾';
       elsif i = 4 then 
         time_str:=time_str || '亿';
       elsif i = 8 then 
         time_str:=time_str || '万';
       elsif i = 12 then 
         time_str:=time_str || '元';
       end if;
       
      exit when out_str = '.'; -- 在出现小数点时跳出循环  
      dbms_output.put_line( ' time_str '||time_str);  
       
     end loop;
     
     out_str:=substr(time_str,-toatal*2,24); -- 除去应为不足儿补的零
     
     dbms_output.put_line( ' out_str  '||out_str);
     
     
     
    end;
      

  4.   

    Public Shared Function UP2(ByVal Mxs As String) As String        Mxs = String.Format("{0:c}", CSng(Mxs)).Replace("¥", "")
            Mxs = Mxs.Replace(".", "")
            Mxs = Mxs.Replace(",", "")        Dim Num1() As String = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}
            Dim Num2() As String = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"}
            Dim Temp1() As String = {"零拾", "零佰", "零仟", "零零", "零元", "零角", "零分", "零万", "万零", "零亿", "亿零", "亿万"}
            Dim temp2() As String = {"零", "零", "零", "零", "元", "", "", "万", "万", "亿", "亿", "亿"}
            If Trim(Mxs) = "" Then
                Return "零元"
            End If        Dim i As Integer
            Dim strTemp As String = ""        For i = 0 To Mxs.Length - 1
                If i > 17 Then
                    Return "不可能,你输入的金额太大!"
                End If            Dim c As Char = Mxs.Chars(Mxs.Length - 1 - i)            If c <> "." Then
                    strTemp = strTemp.Insert(0, Num2(i))
                    strTemp = strTemp.Insert(0, Num1(CInt(c.ToString)))
                End If
            Next        Dim j As Integer        For i = 0 To CInt(Mxs.Length / 2)
                For j = 0 To 9
                    strTemp = strTemp.Replace(Temp1(j), temp2(j))
                Next
            Next
            Return strTemp    End Function