网上我看了几个 感觉没有太满意的public class Moneytransform { private static final String[] gz={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","圆","角","分"}; private static final String[] cap={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; private static final String[] low={"0","1","2","3","4","5","6","7","8","9"};
给你一个我写的搞笑版的,当然,你也可以自己改回严肃版的. 最大支持20位数.Private Function EnToCh1(ByVal En As String) As String Dim num As Double Dim I As Long Dim L As Long Dim M As Long Dim N As Long Dim Tmp As Double Dim CNum(23) As String Dim TmpNum() As String Dim TmpNum1() As String Dim TmpStr As String En = Trim(En) If Not IsNumeric(En) Then EnToCh1 = "DD" Exit Function End IfCNum(0) = "淋" CNum(1) = "鸭" CNum(2) = "矣" CNum(3) = "散" CNum(4) = "吸" CNum(5) = "呒" CNum(6) = "咯" CNum(7) = "切" CNum(8) = "疤" CNum(9) = "狗" CNum(10) = "" CNum(11) = "屎" CNum(12) = "摆" CNum(13) = "牵" CNum(14) = "园" CNum(15) = "腕" CNum(16) = "意" CNum(17) = "昭" CNum(18) = "精" CNum(19) = "疯" CNum(20) = "脚" CNum(21) = "令" CNum(22) = "证" CNum(23) = "妇" En = Trim(En) En = Replace(En, ",", "") TmpNum1 = Split(En, ".") If UBound(TmpNum1) > 1 Then EnToCh1 = "错误数字,多于一个小数点" Exit Function End IfI = Len(TmpNum1(0)) If Left(TmpNum1(0), 1) = "-" Then TmpNum1(0) = Right(TmpNum1(0), I - 1) En = CNum(23) I = I - 1 Else En = "" End If If I > 20 Then EnToCh1 = "数字太长,无法计算" Exit Function End IfM = I L = ((I - 1) \ 4) ReDim TmpNum(L) TmpStr = TmpNum1(0) For N = 0 To L TmpNum(N) = Right(TmpStr, 4) M = M - 4 If M > 0 Then TmpStr = Left(TmpNum1(0), M) NextFor I = L To 0 Step -1 Tmp = Val(TmpNum(I)) For M = 3 To 0 Step -1 N = (Tmp \ (10 ^ M)) Mod 10 EnToCh1 = EnToCh1 & CNum(N) & CNum(M + 10) Next EnToCh1 = EnToCh1 & CNum(I + 14) NextFor L = 11 To 13 EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(L), CNum(0)) EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(0), CNum(0)) Next For N = 0 To 2 For L = 15 To 18 EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(L), CNum(L)) Next For I = 18 To 16 Step -1 For L = I - 1 To 15 Step -1 EnToCh1 = Replace(EnToCh1, CNum(I) & CNum(L), CNum(I) & CNum(0)) Next Next EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(0), CNum(0)) NextIf Left(EnToCh1, 1) = CNum(0) Then EnToCh1 = Right(EnToCh1, Len(EnToCh1) - 1) EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(14), CNum(14))If UBound(TmpNum1) > 0 Then TmpStr = Left(TmpNum1(1) & "0", 2) Tmp = Val(TmpStr) If Tmp = 0 Then EnToCh1 = EnToCh1 & CNum(22) Else For M = 1 To 0 Step -1 N = (Tmp \ (10 ^ M)) Mod 10 EnToCh1 = EnToCh1 & CNum(N) & CNum(M + 19) Next End If Else EnToCh1 = EnToCh1 & CNum(22) End If EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(19), "") EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(20), CNum(0))EnToCh1 = En & EnToCh1 'By WallesCai lol End Function 调用方法么: MSGBOX "2837465019" 就知道了. 若要转载,请注明出处啊,哈哈
网上很多错误的,稍微改了一个 Public Function toDaXie(dblNumber As Double) As String Dim i As Integer Dim hzNum(0 To 9), hzDig(0 To 14), strNum As String Dim HZ, NK, N1, N2 As String If dblNumber > 9999999999999.99 Then toDaXie = "#金额溢出!#" Exit Function End If If dblNumber = 0 Then toDaXie = "零元" Exit Function End If hzNum(0) = "零" hzNum(1) = "壹" hzNum(2) = "贰" hzNum(3) = "叁" hzNum(4) = "肆" hzNum(5) = "伍" hzNum(6) = "陆" hzNum(7) = "柒" hzNum(8) = "捌" hzNum(9) = "玖"
strNum = Format(Round(dblNumber * 100)) If dblNumber < 0 Then HZ = "负" strNum = Mid(strNum, 2) Else HZ = "" End If
For i = 1 To Len(strNum) NK = Val(Mid(strNum, i, 1)) N1 = hzNum(NK) N2 = hzDig(Len(strNum) - i) If NK = 0 And (N2 = "亿" Or N2 = "万" Or N2 = "圆") Then If Right(HZ, 1) = "零" Then HZ = Left(HZ, Len(HZ) - 1) End If If Right(HZ, 1) = "亿" Then If N2 = "圆" Then N1 = N2 N2 = "零" Else N2 = "" End If Else N1 = N2 N2 = "零" End If ElseIf NK = 0 Then N1 = IIf(Right(HZ, 1) = "零", "", N1) If N2 = "分" Then If Right(HZ, 1) <> "角" Then HZ = Left(HZ, Len(HZ) - 1) & "整" N1 = "" End If End If N2 = "" End If HZ = HZ & N1 & N2 Next
If Right(HZ, 1) = "分" And Right(HZ, 2) = "圆整" Then HZ = Left(HZ, Len(HZ) - 1) & "角" Else If Right(HZ, 1) = "零" Then HZ = Left(HZ, Len(HZ) - 1) End If End If toDaXie = HZ End Function
我写的这个,可以一边输入,以便念出声音'**********念金额的情况****************** '十个数字0-9 Case "零" MMControl1.From = lingstart: MMControl1.To = lingend MMControl1.Command = "play" Sleep (500) Case "壹" MMControl1.From = onestart: MMControl1.To = oneend MMControl1.Command = "play" Sleep (500) Case "贰"
private static final String[] gz={"仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","圆","角","分"};
private static final String[] cap={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private static final String[] low={"0","1","2","3","4","5","6","7","8","9"};
public static String getMoney(String sValue){
//检查输入的是否为纯数字
if(!sValue.matches("^[0-9\\.]+$")){
System.out.println("非法输入,请更正");
return "";
}
String sStart="";
String sResult="";
String s=sValue+".00";
int npoint=s.indexOf(".");//找出输入字符串中字符"."的位置
//将数字字符串拼凑成完整格式,如23.14转换为2314 , 23则转换为2300
if (npoint==-1){
sStart=s;
}else{
sStart=s.substring(0, npoint)+s.substring(npoint+1,npoint+1+2);
}
//检查数字是否超出范围,最大只到"仟亿"
if(sStart.length()>gz.length){
System.out.println("数字太大 超出范围 ,无法转换");
return "";
}
//将字符串拆分成字符数组[]
char[] temp=sStart.toCharArray();
//将字符串的每个数字与其对应的数字位相结合,拼凑在一起
String s3="";
for(int i=0;i<temp.length;i++){
sResult=sResult+temp[i]+gz[gz.length-temp.length+i];
}
//替换小写数字为大写数字
for(int i=0 ;i< cap.length;i++){
sResult=sResult.replaceAll(low[i], cap[i]);
}
//处理特殊情况
sResult=sResult.replaceAll("零分", "分");
sResult=sResult.replaceAll("零角", "零");
sResult=sResult.replaceAll("零圆", "圆");
sResult=sResult.replaceAll("零拾", "零");
sResult=sResult.replaceAll("零佰", "零");
sResult=sResult.replaceAll("零仟", "零");
sResult=sResult.replaceAll("零万", "万");
sResult=sResult.replaceAll("零亿", "亿");
for(int i=0;i<sResult.length();i++){
sResult=sResult.replaceAll("零零", "零");
}
sResult=sResult.replaceAll("零分", "");
sResult=sResult.replaceAll("零角", "零");
sResult=sResult.replaceAll("零圆", "圆");
sResult=sResult.replaceAll("零拾", "零");
sResult=sResult.replaceAll("零佰", "零");
sResult=sResult.replaceAll("零仟", "零");
sResult=sResult.replaceAll("零万", "万");
sResult=sResult.replaceAll("零亿", "亿");
sResult=sResult.replaceAll("壹拾", "拾");
return sResult;
}
}
这是我用java写的,之前好像在哪里看到过这样的写法,但没记住.
9F 图片的引思.....用资源文件捆绑, 不必释放文件, 直接播放
tts 很烂吗?是不是设置的有问题啊?可以选择男、女等发声效果。
Dim num As Double
Dim I As Long
Dim L As Long
Dim M As Long
Dim N As Long
Dim Tmp As Double
Dim CNum(23) As String
Dim TmpNum() As String
Dim TmpNum1() As String
Dim TmpStr As String
En = Trim(En)
If Not IsNumeric(En) Then
EnToCh1 = "DD"
Exit Function
End IfCNum(0) = "淋"
CNum(1) = "鸭"
CNum(2) = "矣"
CNum(3) = "散"
CNum(4) = "吸"
CNum(5) = "呒"
CNum(6) = "咯"
CNum(7) = "切"
CNum(8) = "疤"
CNum(9) = "狗"
CNum(10) = ""
CNum(11) = "屎"
CNum(12) = "摆"
CNum(13) = "牵"
CNum(14) = "园"
CNum(15) = "腕"
CNum(16) = "意"
CNum(17) = "昭"
CNum(18) = "精"
CNum(19) = "疯"
CNum(20) = "脚"
CNum(21) = "令"
CNum(22) = "证"
CNum(23) = "妇"
En = Trim(En)
En = Replace(En, ",", "")
TmpNum1 = Split(En, ".")
If UBound(TmpNum1) > 1 Then
EnToCh1 = "错误数字,多于一个小数点"
Exit Function
End IfI = Len(TmpNum1(0))
If Left(TmpNum1(0), 1) = "-" Then
TmpNum1(0) = Right(TmpNum1(0), I - 1)
En = CNum(23)
I = I - 1
Else
En = ""
End If
If I > 20 Then
EnToCh1 = "数字太长,无法计算"
Exit Function
End IfM = I
L = ((I - 1) \ 4)
ReDim TmpNum(L)
TmpStr = TmpNum1(0)
For N = 0 To L
TmpNum(N) = Right(TmpStr, 4)
M = M - 4
If M > 0 Then TmpStr = Left(TmpNum1(0), M)
NextFor I = L To 0 Step -1
Tmp = Val(TmpNum(I))
For M = 3 To 0 Step -1
N = (Tmp \ (10 ^ M)) Mod 10
EnToCh1 = EnToCh1 & CNum(N) & CNum(M + 10)
Next
EnToCh1 = EnToCh1 & CNum(I + 14)
NextFor L = 11 To 13
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(L), CNum(0))
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(0), CNum(0))
Next
For N = 0 To 2
For L = 15 To 18
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(L), CNum(L))
Next
For I = 18 To 16 Step -1
For L = I - 1 To 15 Step -1
EnToCh1 = Replace(EnToCh1, CNum(I) & CNum(L), CNum(I) & CNum(0))
Next
Next
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(0), CNum(0))
NextIf Left(EnToCh1, 1) = CNum(0) Then EnToCh1 = Right(EnToCh1, Len(EnToCh1) - 1)
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(14), CNum(14))If UBound(TmpNum1) > 0 Then
TmpStr = Left(TmpNum1(1) & "0", 2)
Tmp = Val(TmpStr)
If Tmp = 0 Then
EnToCh1 = EnToCh1 & CNum(22)
Else
For M = 1 To 0 Step -1
N = (Tmp \ (10 ^ M)) Mod 10
EnToCh1 = EnToCh1 & CNum(N) & CNum(M + 19)
Next
End If
Else
EnToCh1 = EnToCh1 & CNum(22)
End If
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(19), "")
EnToCh1 = Replace(EnToCh1, CNum(0) & CNum(20), CNum(0))EnToCh1 = En & EnToCh1
'By WallesCai lol
End Function
调用方法么:
MSGBOX "2837465019" 就知道了.
若要转载,请注明出处啊,哈哈
Public Function toDaXie(dblNumber As Double) As String
Dim i As Integer
Dim hzNum(0 To 9), hzDig(0 To 14), strNum As String
Dim HZ, NK, N1, N2 As String
If dblNumber > 9999999999999.99 Then
toDaXie = "#金额溢出!#"
Exit Function
End If
If dblNumber = 0 Then
toDaXie = "零元"
Exit Function
End If
hzNum(0) = "零"
hzNum(1) = "壹"
hzNum(2) = "贰"
hzNum(3) = "叁"
hzNum(4) = "肆"
hzNum(5) = "伍"
hzNum(6) = "陆"
hzNum(7) = "柒"
hzNum(8) = "捌"
hzNum(9) = "玖"
hzDig(0) = "分"
hzDig(1) = "角"
hzDig(2) = "圆"
hzDig(3) = "拾"
hzDig(4) = "佰"
hzDig(5) = "仟"
hzDig(6) = "万"
hzDig(7) = "拾"
hzDig(8) = "佰"
hzDig(9) = "仟"
hzDig(10) = "亿"
hzDig(11) = "拾"
hzDig(12) = "佰"
hzDig(13) = "仟"
hzDig(14) = "万"
strNum = Format(Round(dblNumber * 100))
If dblNumber < 0 Then
HZ = "负"
strNum = Mid(strNum, 2)
Else
HZ = ""
End If
For i = 1 To Len(strNum)
NK = Val(Mid(strNum, i, 1))
N1 = hzNum(NK)
N2 = hzDig(Len(strNum) - i)
If NK = 0 And (N2 = "亿" Or N2 = "万" Or N2 = "圆") Then
If Right(HZ, 1) = "零" Then
HZ = Left(HZ, Len(HZ) - 1)
End If
If Right(HZ, 1) = "亿" Then
If N2 = "圆" Then
N1 = N2
N2 = "零"
Else
N2 = ""
End If
Else
N1 = N2
N2 = "零"
End If
ElseIf NK = 0 Then
N1 = IIf(Right(HZ, 1) = "零", "", N1)
If N2 = "分" Then
If Right(HZ, 1) <> "角" Then
HZ = Left(HZ, Len(HZ) - 1) & "整"
N1 = ""
End If
End If
N2 = ""
End If
HZ = HZ & N1 & N2
Next
If Right(HZ, 1) = "分" And Right(HZ, 2) = "圆整" Then
HZ = Left(HZ, Len(HZ) - 1) & "角"
Else
If Right(HZ, 1) = "零" Then
HZ = Left(HZ, Len(HZ) - 1)
End If
End If
toDaXie = HZ
End Function
'十个数字0-9
Case "零"
MMControl1.From = lingstart:
MMControl1.To = lingend
MMControl1.Command = "play"
Sleep (500)
Case "壹"
MMControl1.From = onestart:
MMControl1.To = oneend
MMControl1.Command = "play"
Sleep (500)
Case "贰"
MMControl1.From = twostart:
MMControl1.To = twoend
MMControl1.Command = "play"
Sleep (500)
cxy5636917 使用自己的空间 百度空间的图片是没法链接的