Function GetChinaNum(OrgNum As Double, Optional IsMoney As Integer, _
Optional dotNum As Integer) As String
'参数OrgNum: 为数字
'参数IsMoney: 为是不是返回人民币大写(1返回)
'参数dotNum: 为设置小数点后面的位数,默认为0,最大为8位
Dim NumDigit(1) As String, NumChar(1) As String
Dim AfterDotNum As String, NewNum As Double, StrNum As String
Dim RepPostNum As Variant, i As Integer, RepNum(1)
If dotNum <> 0 Then
If OrgNum >= 1 Then
NewNum = Left(Trim(OrgNum), InStr(Trim(OrgNum), ".") - 1)
End If
Else
NewNum = Int(OrgNum)
End If
StrNum = Format(NewNum, Right(NumDigit(IsMoney), _
2 * Len(Trim(NewNum)) - 1))
For i = 0 To 10
StrNum = Replace(StrNum, i, Mid(NumChar(IsMoney), i + 1, 1))
Next i
For i = 0 To 4
StrNum = Replace(StrNum, RepNum(IsMoney)(i), _
Left(RepNum(IsMoney)(i), 1))
Next i
If OrgNum < 20 Then
If IsMoney Then
StrNum = Replace(StrNum, "壹拾", "拾")
Else
StrNum = Replace(StrNum, "一十", "十")
End If
End If
If dotNum <> 0 Then
If dotNum > 8 Then dotNum = 8
OrgNum = FormatNumber(OrgNum, dotNum, , , vbFalse)
AfterDotNum = Mid(OrgNum, InStr(OrgNum, ".") + 1, dotNum)
If IsMoney Then
AfterDotNum = Format(AfterDotNum, _
Left("0角0分000000", dotNum + 2))
End If
For i = 0 To 10
AfterDotNum = Replace(AfterDotNum, i, _
Mid(NumChar(IsMoney), i + 1, 1))
Next i
End If
If IsMoney Then
GetChinaNum = StrNum & "元" & AfterDotNum & "
;整"
Else
GetChinaNum = StrNum & "点" & AfterDotNum
End If
For i = 0 To 1
GetChinaNum = Replace(GetChinaNum, _
RepPostNum(i), Right(RepPostNum(i), 1))
Next i
If IsMoney = 0 Then
If OrgNum > 0 Then
GetChinaNum = Replace(GetChinaNum, "零点", "点")
End If
Else
If OrgNum < 1 Then
GetChinaNum = Replace(GetChinaNum, "零元", "")
Else
GetChinaNum = Replace(GetChinaNum, "零元", "元")
End If
GetChinaNum = Replace(GetChinaNum, "零角", "零")
If dotNum <= 2 Then
GetChinaNum = Replace(GetChinaNum, "零分", "")
End If
End If
Erase NumDigit
Erase NumChar
Erase RepNum
End Function