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