| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 590 人关注过本帖
标题:最少代码把数字转换成人民币大写
收藏  订阅  推荐  打印 
singlion
Rank: 1
等级:新手上路
帖子:21
积分:314
注册:2007-6-16
最少代码把数字转换成人民币大写

Dim num As Long, num_t As Long, i As Long, l As Long
Dim rmb As String, rmb_char As String, rmb_weight As String
l = Len(Text1.Text)
For i = l To 1 Step -1
num_t = num
num = Mid(Text1.Text, l - i + 1, 1)
If num_t = num And num = 0 Then GoTo ooo

rmb_char = IIf(num = 0, "零", Choose(num, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
rmb_weight = Choose(i, "", "拾", "佰", "仟", "萬", IIf(Mid(Text1.Text, l - i + 2, 1) = 0, "拾萬", "拾"), "佰", "仟", "萬", "亿", IIf(Mid(Text1.Text, l - i + 2, 1) = 0, "拾亿", "拾"), "佰", "仟", "萬")
rmb = rmb & rmb_char & IIf(num = 0, "", rmb_weight)
ooo:
Next i
MsgBox rmb
搜索更多相关主题的帖子: num  人民币  数字  Long  
2007-11-15 12:54
simpson
Rank: 4
等级:高级会员
威望:6
帖子:795
积分:8088
注册:2006-11-16

有bug
1.个位为0时 最后都会有个"零"字


2.小数不识别

2007-11-15 13:20
朗朗
Rank: 3Rank: 3
等级:中级会员
帖子:229
积分:2496
注册:2007-10-2

以下是引用simpson在2007-11-15 13:20:35的发言:

有bug
1.个位为0时 最后都会有个"零"字


2.小数不识别

你给来个没有BUG的吧

2007-11-15 17:05
purana
Rank: 12Rank: 12Rank: 12
来自:广东-广州
等级:版主
威望:66
帖子:6040
积分:61390
注册:2005-6-17

微软也做不到没bug的东西哦.


我的msn: myfend@hotmail.com
2007-11-15 17:19
simpson
Rank: 4
等级:高级会员
威望:6
帖子:795
积分:8088
注册:2006-11-16

在他基础上改的有点不好

有空重新做个简洁点的给你看


Private Sub Command1_Click()
Dim num As Long, num_t As Long, i As Long, l As Long, s As Long
Dim rmb As String, rmb_char As String, rmb_weight As String
l = Len(Text1.Text)
s = InStr(1, Text1.Text, ".", vbTextCompare)
If s = 0 Then
For i = l To 1 Step -1
num_t = num
num = Mid(Text1.Text, l - i + 1, 1)
If num_t = num And num = 0 Then GoTo ooo1

rmb_char = IIf(num = 0, "零", Choose(num, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
rmb_weight = Choose(i, "", "拾", "佰", "仟", "萬", IIf(Mid(Text1.Text, l - i + 2, 1) = 0, "拾萬", "拾"), "佰", "仟", "萬", "亿", IIf(Mid(Text1.Text, l - i + 2, 1) = 0, "拾亿", "拾"), "佰", "仟", "萬")
rmb = rmb & rmb_char & IIf(num = 0, "", rmb_weight)
ooo1:
Next i
rmb = IIf(Mid(rmb, Len(rmb), Len(rmb)) = "零", Mid(rmb, 1, Len(rmb) - 1), rmb)
MsgBox rmb
Exit Sub
Else
For i = s - 1 To 1 Step -1
num_t = num
num = Mid(Text1.Text, s - i, 1)

If num_t = num And num = 0 Then GoTo ooo2

rmb_char = IIf(num = 0, "零", Choose(num, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
rmb_weight = Choose(i, "", "拾", "佰", "仟", "萬", IIf(Mid(Text1.Text, l - i + 2, 1) = 0, "拾萬", "拾"), "佰", "仟", "萬", "亿", IIf(Mid(Text1.Text, l - i + 2, 1) = 0, "拾亿", "拾"), "佰", "仟", "萬")
rmb = rmb & rmb_char & IIf(num = 0, "", rmb_weight)
ooo2:
Next i
rmb = IIf(Mid(rmb, Len(rmb), Len(rmb)) = "零", Mid(rmb, 1, Len(rmb) - 1), rmb)

If s <> l Then rmb = rmb & "点"
For i = l To s + 1 Step -1
num = Mid(Text1.Text, s - i + 1 + l, 1)
rmb_char = IIf(num = 0, "零", Choose(num, "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"))
rmb = rmb & rmb_char
Next i
MsgBox rmb
Exit Sub
End If
End Sub

[此贴子已经被作者于2007-11-15 18:56:39编辑过]

2007-11-15 17:37
multiple1902
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:41
帖子:4479
积分:45682
注册:2007-2-9

确实……楼上这个代码不中看


“高考”这个词在耳边不断萦绕,心中的激动不言而喻。写下一句话,一起努力。Let's struggle together.
2007-11-15 18:02
slore
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:16
帖子:1108
积分:11276
注册:2005-7-1

Private Sub Command1_Click()
Print 大写转换("1442778565.93")
End Sub

Public Function
大写转换(ByVal NumStr As String) As String
    Dim
As String, As Integer, i As Integer

   
= ReplaceEx(NumStr, "0", "", "1", "", "2", "", "3", "", "4", "", "5", "", "6", "", "7", "", "8", "", "9", "")
   
Pos = InStr(NumStr, ".")
   
If Pos = 0 Then
        
= Len(NumStr)
   
Else
        
= Pos - 1
    End If
    For
i = To 1 Step - 1
        Mid(数, i * 2, 1) = Mid("圆拾佰仟万拾佰仟亿拾佰仟万", 长 - i + 1, 1)
   
Next
    If
Pos > 0 Then
        
NumStr = Replace(数, ".", Empty, Pos * 2 - 1)
        
= Mid(数, 1, (Pos - 1) * 2)
        
Select Case Len(NumStr)
            
Case 4
                Mid(NumStr, 2, 1) = ""
                Mid(NumStr, 4, 1) = ""
            Case 2
                Mid(NumStr, 2, 1) = ""
        End Select
    Else
        
NumStr = Empty
    End If
   
= ReplaceEx(& NumStr, "零分", Empty, "零角", "", "零拾", "", "零佰", "", "零仟", "", "零零零", "", "零零", "", "零亿", "亿", "零万", "", "零圆", "", "亿万", "亿")
   
大写转换 =
End Function

Public Function
ReplaceEx(InputStr As String, ParamArray 参数() As Variant) As String
Dim
tmp As Long
ReplaceEx = InputStr
    For tmp = 0 To (UBound(参数) - 1) Step 2
        ReplaceEx = Replace(ReplaceEx, 参数(tmp), 参数(tmp + 1))
   
Next
End Function

快上课了……
2007-11-22 22:13
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.063231 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved