金额转为汉字大写

网上找了个例子,修改了下,只要修改strUnitList的长度就可以控制能转的数字范围了

 

    Public Shared Function getMoney(ByVal num As Decimal) As StringDim 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 ThenReturn "溢出"End IfstrUnitList = Right(strUnitList, intLen)     '取出对应位数的strUnitList的值。如:200.55,intLen为5所以strUnitList=佰拾元角分'循环取出每一位需要转换的值 For i = 0 To intLen - 1strSplitPara = 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" ThenstrNum = ""strUnit = ""nzero = nzero + 1ElseIf strSplitPara <> "0" AndAlso nzero <> 0 ThenstrNum = "零" & strNumList.Substring(temp * 1, 1)strUnit = strUnitList.Substring(i, 1)nzero = 0ElsestrNum = strNumList.Substring(temp * 1, 1)strUnit = strUnitList.Substring(i, 1)nzero = 0End IfEnd IfElse         '该位是万亿,亿,万,元位等关键位 If strSplitPara <> "0" AndAlso nzero <> 0 ThenstrNum = "零" & strNumList.Substring(temp * 1, 1)strUnit = strUnitList.Substring(i, 1)nzero = 0ElseIf strSplitPara <> "0" AndAlso nzero = 0 ThenstrNum = strNumList.Substring(temp * 1, 1)strUnit = strUnitList.Substring(i, 1)nzero = 0ElseIf strSplitPara = "0" AndAlso nzero >= 3 ThenstrNum = ""strUnit = ""nzero = nzero + 1ElsestrNum = ""strUnit = strUnitList.Substring(i, 1)nzero = 0End IfEnd IfEnd IfEnd IfIf i = (intLen - 11) OrElse i = (intLen - 3) Then    '如果该位是亿位或元位,则必须写上 strUnit = strUnitList.Substring(i, 1)End IfstrResult = strResult + strNum + strUnitIf i = intLen - 1 AndAlso strSplitPara = "0" Then   '最后一位(分)为0时,加上“整” strResult = strResult + "整"End IfNextIf num = 0 ThenstrResult = "零元整"End IfReturn strResultEnd FunctionPublic Shared Function getMoney(ByVal numstr As String) As StringTryDim num As Decimal = Convert.ToDecimal(numstr)Return getMoney(num)CatchReturn "非数字形式!"End TryEnd Function



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部