人民币大小写转换

 

Private   Const  M_Tail  As   String   =   " "
    
Private   Const  M_Zero  As   String   =   " "
    
Private   Const  M_Cn  As   String   =  M_Zero  &   " 壹贰叁肆伍陆柒捌玖 "
    
Private   Const  M_Yuan  As   String   =   " "
    
Private   Const  M_FomatStr  As   String   =   " 万仟佰拾亿仟佰拾万仟佰拾 "   &  M_Yuan  &   " 角分 "
    
Private   Const  M_Start  As   String   =  M_Zero  &  M_Yuan  &  M_Tail
    
Private   Shared   ReadOnly  M_MaxLength  As   Integer   =  M_FomatStr.Length
    
Public   Shared   Function ConvertToCapsString(ByVal Money As DoubleAs String
        
Dim i, Max As Integer
        
Dim NZero As Integer = 0
        
Dim StrDec, StrPos, ch1 As String, ch2 As String = Nothing
        
Dim ChnNum As String = Nothing
        
Dim StrOnePosValue As String
        
Dim IntOnePosValue As Integer

        Money 
= Math.Round(Math.Abs(Money), 2)                                      '将num取绝对值并四舍五入取2位小数 
        StrDec = Convert.ToInt64(Money * 100).ToString                              '将num乘100并转换成字符串形式 (Convert:将一个基本类型转换成另一个基本类型)
        Max = StrDec.Length                                                         '找出最高位 

        
If Max > 15 Then
            
Return "数据过大"
            
Exit Function
        
ElseIf Money = 0 Then
            ChnNum 
= M_Start                                                        '0的时候,直接输出“零元整” 
        Else
            StrPos 
= M_FomatStr.Substring(M_MaxLength - Max)                        '从字符串的第一个位置开始检索
            For i = 0 To Max - 1                                                    '循环取出每一位需要转换的值
                StrOnePosValue = StrDec.Substring(i, 1)                             '取出需转换的某一位的值 
                IntOnePosValue = Convert.ToInt32(StrOnePosValue)                    '转换为数字

                
If i <> Max - 3 AndAlso i <> Max - 7 AndAlso i <> Max - 15 Then     '用andalso实现短路原则,提高程序执行效率
                    If StrOnePosValue = "0" Then                                    '当所取位数不为元、万、亿、万亿上的数字时
                        ch1 = ""                                                    '此位为零,只计入零的个数。不转换。
                        ch2 = ""
                        NZero 
= NZero + 1
                    
Else
                        
If NZero = 0 Then                                           '此位非零 
                            ch1 = M_Cn.Substring(IntOnePosValue * 11)             '前面没有零,追加此位的中文
                            ch2 = StrPos.Substring(i, 1)
                            NZero 
= 0
                        
Else
                            ch1 
= M_Zero & M_Cn.Substring(IntOnePosValue * 11)    '前面已经有零,无论有多少只加一个零,然后追加此位的中文 
                            ch2 = StrPos.Substring(i, 1)
                            NZero 
= 0
                        
End If
                    
End If
                
Else

                    
If StrOnePosValue <> "0" AndAlso NZero <> 0 Then                '该位是万亿,亿,万,元位等关键位 
                        ch1 = M_Zero & M_Cn.Substring(IntOnePosValue * 11)
                        ch2 
= StrPos.Substring(i, 1)
                        NZero 
= 0
                    
Else
                        
If StrOnePosValue <> "0" AndAlso NZero = 0 Then
                            ch1 
= M_Cn.Substring(IntOnePosValue * 11)
                            ch2 
= StrPos.Substring(i, 1)
                            NZero 
= 0
                        
Else
                            
If StrOnePosValue = "0" AndAlso NZero >= 3 Then
                                ch1 
= ""
                                ch2 
= ""
                                NZero 
= NZero + 1
                            
Else
                                
If Max > 11 Then
                                    ch1 
= ""                                        '亿上 
                                    NZero = NZero + 1
                                
Else
                                    ch1 
= ""                                        '亿下 
                                    ch2 = StrPos.Substring(i, 1)
                                    NZero 
= NZero + 1
                                
End If
                            
End If
                        
End If
                    
End If
                
End If
                
If i = Max - 11 OrElse i = Max - 3 Then
                    ch2 
= StrPos.Substring(i, 1)                                    '如果该位是亿位或元位,则必须写上 
                End If
                ChnNum 
= ChnNum & ch1 & ch2
                
If i = Max - 1 AndAlso StrOnePosValue = "0" Then
                    ChnNum 
= ChnNum & M_Tail                                        '最后一位(分)为0时,加上“整” 
                End If
            
Next
        
End If
        
Return ChnNum
    
End Function

    
Public   Shared   Function ConvertToCapsString(ByVal Money As StringAs String
        
Dim num As Decimal = 0
        
Try
            num 
= Convert.ToDecimal(Money)
        
Catch ex As Exception
            
Return "金额有误"
            
Exit Function
        
End Try
        
Return ConvertToCapsString(num)
    
End Function


    
' ==========================================================================================人民币大小写转换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值