記錄一下利用VB將輸入的阿拉伯數字金額轉成國字大寫的金額,並傳回給原呼叫的程式

因怕以後要用又找不到原式修改,先記錄來著!
------------------------------------------------------------不割了---------------------------------------
這個函數在原有的公司系統中就有利用PHP來編寫了
只是將流程及IF改一下就可以套用在VB中了
基本上此函數是利用遞迴方式自己玩自己,一直玩到數字沒了
同時也利用數字數位來判斷個、拾、佰、仟、萬、億、兆...(我家會計說用不到這麼大了...)
基本上算到元整,角、文、分、厘就不用了吧...(反正都四捨五入了...)
若就這個函數再稍微修改一下,也可改為 p,n,u,m,K,M,G,T....(等那天無聊再玩吧...)
 
 
'將傳入的阿拉伯數字轉成中文大寫數字===================================
    Public Function NumberToCn(numPric As Decimal) As String
     '中文小寫字母陣列值
        Dim c_digit_min() As String = { "零" , "十" , "百", "千" , "萬" , "億", "兆" }
        Dim c_num_min() As String = { "零" , "一" , "二", "三" , "四" , "五", "六" , "七" , "八", "九" , "十" }
     '中文大寫字母陣列值
        Dim cDigit() As String = { "零" , "拾" , "佰", "仟" , "萬" , "億", "兆" }
        Dim cNum() As String = { "零" , "壹" , "貳", "參" , "肆" , "伍", "陸" , "柒" , "捌", "玖" , "拾" }
 
        '負數值(用不著,欠人家錢就不用開負數支票給人家了)
        If numPric < 0 Then Return "負" + NumberToCn(-numPric)
        '個位數大寫金額
        If numPric < 10 Then Return cNum(numPric)
        '十位數========
        If numPric = 10 Then Return cNum(1) + cDigit(1)
        '十一至二十以下輸出為("壹拾X")
        If numPric < 20 Then Return cNum(1) + cDigit(1) + cNum(numPric - 10)
        '二十以上的十雙位數
        If numPric < 100 Then
            If numPric Mod 10 Then
                Return cNum(Fix(numPric / 10)) + cDigit(1) + cNum(numPric Mod 10)
            Else
                Return cNum(Fix(numPric / 10)) + cDigit(1)
            End If
        End If
 
        '三位數=======百字輩
        If numPric < 1000 Then
            If (numPric Mod 100) = 0 Then
                Return cNum(Fix(numPric / 100)) + cDigit(2)
            ElseIf (numPric Mod 100) < 10 Then
                Return cNum(Fix(numPric / 100)) + cDigit(2) + cNum(0) + NumberToCn(numPric Mod 100)
            Else
                Return cNum(Fix(numPric / 100)) + cDigit(2) + NumberToCn(numPric Mod 100)
            End If
        End If
 
        '四位數======千字輩
        If numPric < 10000 Then
            If (numPric Mod 1000) = 0 Then  '千整數倍時
                Return cNum(Fix(numPric / 1000)) + cDigit(3)
            ElseIf (numPric Mod 1000) < 100 Then    '餘額小於一百則千位加零加後面數字
                Return cNum(Fix(numPric / 1000)) + cDigit(3) + cNum(0) + NumberToCn(numPric Mod 1000)
            Else     '千位再加後面的百拾個位
                Return cNum(Fix(numPric / 1000)) + cDigit(3) + NumberToCn(numPric Mod 1000)
            End If
        End If
 
        '五位數至八位數=========萬字輩
        If numPric < 100000000 Then
            If (numPric Mod 10000) = 0 Then
                Return NumberToCn(Fix(numPric / 10000)) + cDigit(4)
            ElseIf (numPric Mod 10000) < 1000 Then
                Return NumberToCn(Fix(numPric / 10000)) + cDigit(4) + cNum(0) + NumberToCn(numPric Mod 10000)
            Else
                Return NumberToCn(Fix(numPric / 10000)) + cDigit(4) + NumberToCn(numPric Mod 10000)
            End If
        End If
 
        '九位數至十二位數========億字輩
        If numPric < 1000000000000 Then
            If (numPric Mod 100000000) = 0 Then '億整數倍時
                Return NumberToCn(Fix(numPric / 100000000)) + cDigit(5)
            ElseIf (numPric Mod 100000000) < 10000000 Then  '餘額小於一千萬則加零加億之後的數字
                Return NumberToCn(Fix(numPric / 100000000)) + cDigit(5) + cNum(0) + NumberToCn(numPric Mod 100000000)
            Else     '計算億之前的數字及億之後的數字
                Return NumberToCn(Fix(numPric / 100000000)) + cDigit(5) + NumberToCn(numPric Mod 100000000)
            End If
        End If
 
=====2013/11/11 移自FB =======
arrow
arrow
    全站熱搜

    割~LZ 發表在 痞客邦 留言(0) 人氣()