金额转为汉字大写

来源:互联网 发布:苹果软件不受信任 编辑:程序博客网 时间:2024/04/30 01:30

网上找了个例子,修改了下,只要修改strUnitList的长度就可以控制能转的数字范围了

 

    Public Shared Function getMoney(ByVal num As Decimal) As String        Dim strNumList As String = "零壹贰叁肆伍陆柒捌玖"       '0-9所对应的汉字        Dim strUnitList As String = "仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分"        '数字位所对应的汉字        Dim strSplitPara As String = ""     '从原num值中取出的值        Dim strPara As String = ""      '数字的字符串形式        Dim strResult As String = ""        '人民币大写金额形式        Dim i As Integer        '循环变量        Dim intLen As Integer         'num的值乘以100的字符串长度        Dim strNum As String = ""      '数字的汉语读法        Dim strUnit As String = ""      '数字位的汉字读法        Dim nzero As Integer = 0        '用来计算连续的零值是几个        Dim temp As Integer      '从原num值中取出的值        num = Math.Round(Math.Abs(num), 2)      '将num取绝对值并四舍五入取2位小数        strPara = CLng((num * 100)).ToString()     '将num乘100并转换成字符串形式        intLen = strPara.Length     '找出最高位        If intLen > strUnitList.Length Then            Return "溢出"        End If        strUnitList = Right(strUnitList, intLen)     '取出对应位数的strUnitList的值。如:200.55,intLen为5所以strUnitList=佰拾元角分        '循环取出每一位需要转换的值         For i = 0 To intLen - 1            strSplitPara = strPara.Substring(i, 1)      '取出需转换的某一位的值             temp = Convert.ToInt32(strSplitPara)        '转换为数字            If i <> (intLen - 3) AndAlso i <> (intLen - 7) AndAlso i <> (intLen - 11) AndAlso i <> (intLen - 15) Then   '当所取位数不为元、万、亿、万亿上的数字时                 If strSplitPara = "0" Then                    strNum = ""                    strUnit = ""                    nzero = nzero + 1                Else                    If strSplitPara <> "0" AndAlso nzero <> 0 Then                        strNum = "零" & strNumList.Substring(temp * 1, 1)                        strUnit = strUnitList.Substring(i, 1)                        nzero = 0                    Else                        strNum = strNumList.Substring(temp * 1, 1)                        strUnit = strUnitList.Substring(i, 1)                        nzero = 0                    End If                End If            Else         '该位是万亿,亿,万,元位等关键位                 If strSplitPara <> "0" AndAlso nzero <> 0 Then                    strNum = "零" & strNumList.Substring(temp * 1, 1)                    strUnit = strUnitList.Substring(i, 1)                    nzero = 0                Else                    If strSplitPara <> "0" AndAlso nzero = 0 Then                        strNum = strNumList.Substring(temp * 1, 1)                        strUnit = strUnitList.Substring(i, 1)                        nzero = 0                    Else                        If strSplitPara = "0" AndAlso nzero >= 3 Then                            strNum = ""                            strUnit = ""                            nzero = nzero + 1                        Else                            strNum = ""                            strUnit = strUnitList.Substring(i, 1)                            nzero = 0                        End If                    End If                End If            End If            If i = (intLen - 11) OrElse i = (intLen - 3) Then    '如果该位是亿位或元位,则必须写上                 strUnit = strUnitList.Substring(i, 1)            End If            strResult = strResult + strNum + strUnit            If i = intLen - 1 AndAlso strSplitPara = "0" Then   '最后一位(分)为0时,加上“整”                 strResult = strResult + "整"            End If        Next        If num = 0 Then            strResult = "零元整"        End If        Return strResult    End Function    Public Shared Function getMoney(ByVal numstr As String) As String        Try            Dim num As Decimal = Convert.ToDecimal(numstr)            Return getMoney(num)        Catch            Return "非数字形式!"        End Try    End Function


原创粉丝点击