RDLC自定义函数 数字转人民币大写(金额) 目前只支持到亿,解决零角问题

代码一:
' RDLC自定义函数 数字转人民币大写(金额) 目前只支持到亿,解决零角问题
Function CNMoney(ByVal Money As String, Optional ByVal YB As Boolean = True) As String
        Dim X, Y As String
        Dim I As Integer
        Const Zimu =  " .sbqwsbqysbqwsbq "  ''定义位置代码
        Const Letter =  " 0123456789sbqwy.zjf "  ''定义汉字缩写
        Const Upcase =  " 零壹贰叁肆伍陆柒捌玖拾佰仟万亿圆整角分 "  ' 定义大写汉字
        Dim Temp As String
        Try
            Temp = Convert.ToString(Format(Convert.ToDouble(Money),  " 0.00 "))
        Catch ex As Exception
            Throw New NotSupportedException( " 数据给出错误(非数字格式)! ")
            CNMoney =  " Error. "
            Exit Function
        End Try
        If Len(Temp) >  12 Then
            Throw New NotSupportedException( " 数据太大,无法计算(超亿位无法计算)! ")
            CNMoney =  " Error. "
            Exit Function
        End If
        If InStr(Temp,  " . ") >  0 Then Temp = Left(Temp, InStr(Temp,  " . ") -  1)
        X = Format(Convert.ToDouble(Money),  " 0.00 "' 格式化货币
        Y =  ""
        For I =  1 To Len(X) -  3
            Y = Y & Mid(X, I,  1) & Mid(Zimu, Len(X) -  2 - I,  1)
        Next
        If Right(X,  3) =  " .00 " Then
            Y = Y &  " z "  ''***元整
        Else
            If Right(X,  1) =  " 0 " Then
                Y = Y & Left(Right(X,  2),  1) &  " j " &  " z "  ' *元*角*整
            Else
                Y = Y & Left(Right(X,  2),  1) &  " j " & Right(X,  1) &  " f "  ''*元*角*分
            End If
        End If
        Y = Replace(Y,  " 0q "" 0 "''避免零千(如:40200肆萬零千零贰佰)
        Y = Replace(Y,  " 0b "" 0 "''避免零百(如:41000肆萬壹千零佰)
        Y = Replace(Y,  " 0s "" 0 "''避免零十(如:204贰佰零拾零肆)
        Do While Y <> Replace(Y,  " 00 "" 0 ")
            Y = Replace(Y,  " 00 "" 0 "''避免双零(如:1004壹仟零零肆)
        Loop
        Y = Replace(Y,  " 0y "" y "''避免零億(如:210億 贰佰壹十零億)
        If Val(Mid(Right(Temp,  4),  11)) >  0 Then
            Y = Replace(Y,  " 0w "" w0 "''避免无零千(如: 102000 拾万贰仟),应该是拾万零贰仟
        Else
            Y = Replace(Y,  " 0w "" w "''避免零萬(如:210萬 贰佰壹十零萬)
        End If
         ' Y = IIf(Len(X) = 5 And Left(Y, 1) = "1", Right(Y, Len(Y) - 1), Y)  '' 避免壹十(如:14壹拾肆;10壹拾)
        Y = IIf(Len(X) =  4, Replace(Y,  " 0. """), Replace(Y,  " 0. "" . "))  ''避免零元(如: 20.00贰拾零圆; 0.12零圆壹角贰分)
        If Len(Temp) >=  9 Then  '
            Y = Replace(Y,  " yw "" y "' 避免亿万元 如 100000000,壹亿万元 应该是壹亿元
        End If  '
        For I =  1 To  19
            Y = Replace(Y, Mid(Letter, I,  1), Mid(Upcase, I,  1))  ''大写汉字
        Next
        Y = Y.Replace( " 零角 "" ")
        If YB = False Then
            Y = Y.Replace( " 圆整 """)
        End If
        
        CNMoney = Y
    End Function
    
调用 =code.CNMoney( 102.3534)
    
测试结果:
1409.50 壹仟肆佰零玖圆伍角整
6007.14 陆仟零柒圆壹角肆分
1680.32 壹仟陆佰捌拾圆叁角贰分
107000.53壹拾万零柒仟圆伍角叁分
16409.02壹万陆仟肆佰零玖圆零贰分
325.04 叁佰贰拾伍圆零肆分
900100001.40玖亿零壹拾万零壹圆肆角整
 

本文是从网上找的,稍微改动了一点,如有问题,留言。

 

如有更好的办法,请描述,谢谢。

 

 

下面的这段代码有点问题,等有时间在改动:

 

代码二:
Function CNMoney(num As String) As String     

If IsNumeric(num) = False Or num =  "" Then         

CNMoney= num         

Exit Function     

End If     

Dim s1, s2, sin, resultStr, nAmount As String     

s1 =  " 零壹贰叁肆伍陆柒捌玖 "     

s2 =  " 亿仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分 "          

nAmount = Trim(Str(Val(num) *  100))     

Dim numLength As Integer     

numLength = Len(Trim(Str(nAmount)))      

Dim useStr As String     

useStr = Mid(s2, (Len(s2) - numLength +  1), numLength)          

Dim zeroCounter, flag As Integer     

zeroCounter =  0     

flag =  0          

Do While flag < Len(nAmount)         

flag = flag +  1         

Dim cnNum As String         

cnNum = Mid(nAmount, flag,  1)         

cnNum = Mid(s1, Val(cnNum) +  11)         

sin = Mid(useStr, flag,  1)         

If cnNum =  " " Then             

cnNum =  ""             

If sin =  " 亿 " Or sin =  " " Then                     

 ElseIf sin =  " " Then                                  

If Mid(resultStr, Len(resultStr),  1) =  " 亿 " Then                     

sin =  ""                 

End If             

Else                 

sin =  ""             

End If             

zeroCounter = zeroCounter +  1         

Else             

If zeroCounter >  0 Then                 

cnNum =  " " + Trim(cnNum)                

 zeroCounter =  0             

End If         

End If                  

resultStr = Trim(resultStr) + Trim(cnNum) + Trim(sin)     

Loop          

If Mid(nAmount, Len(nAmount),  1) =  " 0 " Then         

CNMoney= resultStr +  " "     

Else         

CNMoney= resultStr     

End If 

End Function


问题如下:
107000.53壹拾万零柒仟元零伍角叁分

下面的两种写法是正确的:
         壹拾万零柒仟元伍角叁分
    壹拾万柒仟元零伍角叁分

 

转载于:https://www.cnblogs.com/puke/archive/2012/08/02/2619741.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值