金额转为汉字大写

网上找了个例子,修改了下,只要修改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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值