Flex3怎么用逻辑思维把数字转换成中文,如:10001转换成一万零一
发布网友
发布时间:2022-05-10 17:45
我来回答
共1个回答
热心网友
时间:2023-10-19 22:26
这个用逻辑语言不太好形容.
我可以直接给你写出来编译通过,你再改写就好.flex3,语法不熟悉.我用vb给你写.不过你得给我加分.因为这个挺麻烦的.
Option Explicit
Private Sub Form_Load()
'10E4为10的4次方,以此类推
'中国表示数量的数词,由小到大依次为
'个、十、百、千、
'万(10E4)、亿(10E8)、兆(10E12)、京(10E16)、垓(10E20)、秭(10E24)、
'穰(10E28)、沟(10E32)、涧(10E36)、正(10E40)、载(10E44),
'极(10E48)、恒河沙(10E52)、阿僧只(10E56)、那由他(10E60)、不可思议(10E64)、无量(10E68)、大数(10E72)等
'再大的单位我也不知道了,估计你也用不上.
'正常数字首位不为0,所以不考虑特殊念法,传统在数字中间有若干零要考虑只念一次的问题.
'这里我以文本计算,你可以把数值转化成文本来计算,因为数值表达长度有限,其次文本方便取长度.
'先定义好单位和数字.
Dim saNum As Variant, saMixUnit As Variant, saUnit As Variant
saNum = Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九")
'四位为一小段右数位数相对应的小单位
saMixUnit = Array("千", "", "十", "百", "")
saUnit = Array("", "万", "亿", "兆", "京", "垓", "秭", "穰", "沟", "涧", "正", "载", "极", "恒河沙", "阿僧只", "那由他", "不可思议", "无量", "大数")
'获取数值文本(这一步你可以通过转化数值成文本来实现)
Dim tn As String
tn = "314313500000" '任意一个测试数据
'获取数值文本长度
Dim tLen As Integer
tLen = Len(tn)
'把阿拉伯数字传换成汉字数字
Dim sChar As String, i As Integer
Dim sNewNum As String '转化完毕的中文数值
For i = 1 To tLen
sChar = Mid(tn, i, 1)
sNewNum = sNewNum & ChangeCN(sChar, saNum)
Next i
'sNewNum为现在要处理的数据
'计算式4的几倍,因为中国大数据单位都是以10的4次方为单位.
Dim iE4 As Integer '以4位长度为一段
Dim sOverNum As String '最终结果
Dim iRight As Integer '从右边数第几位
iRight = 0
For i = tLen + 1 To 2 Step -1
sChar = Mid(sNewNum, i - 1, 1)
iRight = iRight + 1
If sChar <> "零" Then '0后不用加小单位
sChar = sChar & saMixUnit(iRight Mod 4)
End If
If (iRight Mod 4) = 1 And iRight <> 1 Then '后面接大单位
sChar = sChar & saUnit(Int(iRight / 4))
End If
sOverNum = sChar & sOverNum
Next
'处理掉多余的0
Do While InStr(1, sOverNum, "零零")
sOverNum = Replace(sOverNum, "零零", "零")
Loop
Do While InStr(1, sOverNum, "十零")
sOverNum = Replace(sOverNum, "十零", "十")
Loop
If Right(sOverNum, 1) = "零" Then
sOverNum = Left(sOverNum, Len(sOverNum) - 1)
End If
Debug.Print sOverNum
End Sub
'把单个数值转化为汉字数值
Function ChangeCN(ByVal sChar As String, ByVal saNum As Variant)
Dim i As Integer
For i = 0 To 9
If CInt(sChar) = i Then
ChangeCN = saNum(i)
Exit For
End If
Next i
End Function
基本就这样了,看似简单还挺折腾人的.测试过基本没啥问题.不排除可能有些特殊情况没考虑到.注释挺详细 的了,如果你有点编程基础基本改改就能用了.
最后强烈要求加分,累死我了,写了一头午,还没吃饭呢.