给你一段我写的VB.Net代码: '转换金额为大写 Private Function getChinese(ByVal arab As String) As String Select Case arab Case "0" Return "零" Case "1" Return "壹" Case "2" Return "贰" Case "3" Return "叁" Case "4" Return "肆" Case "5" Return "伍" Case "6" Return "陆" Case "7" Return "柒" Case "8" Return "捌" Case "9" Return "玖" End Select End Function Private Function ConvertToChinese(ByVal dblJE As Decimal) As String Try Dim value As String value = Format(dblJE, "##########################.00") value = Replace(value, ".", "") Dim dw(17) As String dw(0) = "分" dw(1) = "角" dw(2) = "元" dw(3) = "拾" dw(4) = "佰" dw(5) = "仟" dw(6) = "万" dw(7) = "拾" dw(8) = "佰" dw(9) = "仟" dw(10) = "亿" dw(11) = "拾" dw(12) = "佰" dw(13) = "仟" dw(14) = "万" dw(15) = "拾" dw(16) = "佰" dw(17) = "仟" Dim Stack1 As New Stack() Dim stack2 As New Stack() Dim I As Integer For I = value.Length To 1 Step -1 Stack1.Push(Mid(value, I, 1)) stack2.Push(dw(value.Length - I)) Next Dim str As String While Stack1.Count > 0 Dim a As String a = Stack1.Pop() If a <> "0" Then str = str & getChinese(a) & stack2.Pop() Else If Stack1.Count > 0 Then Dim b As String b = stack2.Pop() If b = "亿" Or b = "万" Or b = "元" Then str = str & b End If If Stack1.Peek() <> "0" Then str = str & getChinese(a) End If Else stack2.Pop() End If End If End While If str.Substring(str.Length - 1, 1) <> "分" Then str = str & "整" End If Return str Catch exp As Exception MsgBox("转换成大写金额失败:" & Chr(13) & exp.ToString, MsgBoxStyle.Critical, "错误") Return "" End Try End Function '获得大写金额 Private Function getDXJE(ByVal obj As Object) As String If IsDBNull(obj) Then Return "" Else If IsNumeric(obj) Then Return ConvertToChinese(obj) Else Return "" End If End If End Function
我写的一个程序 但是 存在00问题,而且不是很强壮,小数点还没有处理。 希望高手提供一个解决00问题的思路。declarein_str varchar2(15):='440066.00'; -- 输入字符 out_str varchar2(50); str_bing varchar2(50); time_str varchar2(50); loop_nunber integer:=0; toatal integer:=0; length_number integer:=length(in_str); -- 计算字符长度 point integer:=null; begin for i in 1..length_number loop out_str:=substr(in_str,i,1); -- 一个一个字符输出 toatal:=toatal+1; DBMS_OUTPUT.PUT_LINE('the str is 第一次循环 '|| '"' || out_str || '"' || i );
if out_str = '.' then --判断是否有小数点,如果有计算出第几位的位 point:=i; --如果没有point为空
else point:=0;
end if;
exit when out_str = '.'; -- 在出现小数点时跳出循环
end loop ;
-- 如果不够12位的前面补“0”使得位数达到12位
if point > 0 then toatal:=toatal-1; end if;
if toatal = 12 then loop_nunber := 12 ; elsif toatal < 12 then loop_nunber := 12 - toatal;
for i in 1..loop_nunber loop time_str:=time_str||'0'; end loop;
in_str:=time_str||in_str;
end if ; dbms_output.put_line( ' in_str '||in_str||' 位');
for i in 1..length(in_str) loop
out_str:=substr(in_str,i,1); -- 一个一个字符输出
DBMS_OUTPUT.PUT_LINE('the str is '|| '"' || out_str || '"' || i );
if out_str = '1' then --转换成中文大写 str_bing :=str_bing || '壹'; elsif out_str = '2' then str_bing :=str_bing || '贰'; elsif out_str = '3' then str_bing :=str_bing || '叁'; elsif out_str = '4' then str_bing :=str_bing || '肆'; elsif out_str = '5' then str_bing :=str_bing || '伍'; elsif out_str = '6' then str_bing :=str_bing || '陆'; elsif out_str = '7' then str_bing :=str_bing || '柒'; elsif out_str = '8' then str_bing :=str_bing || '捌'; elsif out_str = '9' then str_bing :=str_bing || '玖'; elsif out_str = '0' then str_bing :=str_bing || '零'; end if;
-- 加入单位 time_str:=null; for i in 1..length(in_str) loop
out_str:=substr(str_bing,i,1); -- 一个一个字符输出
time_str:=time_str||out_str;
if i = 1 or i = 5 or i = 9 then time_str:=time_str || '千'; elsif i = 2 or i = 6 or i = 10 then time_str:=time_str || '百'; elsif i = 3 or i = 7 or i = 11 then time_str:=time_str || '拾'; elsif i = 4 then time_str:=time_str || '亿'; elsif i = 8 then time_str:=time_str || '万'; elsif i = 12 then time_str:=time_str || '元'; end if;
Public Shared Function UP2(ByVal Mxs As String) As String Mxs = String.Format("{0:c}", CSng(Mxs)).Replace("¥", "") Mxs = Mxs.Replace(".", "") Mxs = Mxs.Replace(",", "") Dim Num1() As String = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"} Dim Num2() As String = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"} Dim Temp1() As String = {"零拾", "零佰", "零仟", "零零", "零元", "零角", "零分", "零万", "万零", "零亿", "亿零", "亿万"} Dim temp2() As String = {"零", "零", "零", "零", "元", "", "", "万", "万", "亿", "亿", "亿"} If Trim(Mxs) = "" Then Return "零元" End If Dim i As Integer Dim strTemp As String = "" For i = 0 To Mxs.Length - 1 If i > 17 Then Return "不可能,你输入的金额太大!" End If Dim c As Char = Mxs.Chars(Mxs.Length - 1 - i) If c <> "." Then strTemp = strTemp.Insert(0, Num2(i)) strTemp = strTemp.Insert(0, Num1(CInt(c.ToString))) End If Next Dim j As Integer For i = 0 To CInt(Mxs.Length / 2) For j = 0 To 9 strTemp = strTemp.Replace(Temp1(j), temp2(j)) Next Next Return strTemp End Function
'转换金额为大写
Private Function getChinese(ByVal arab As String) As String
Select Case arab
Case "0"
Return "零"
Case "1"
Return "壹"
Case "2"
Return "贰"
Case "3"
Return "叁"
Case "4"
Return "肆"
Case "5"
Return "伍"
Case "6"
Return "陆"
Case "7"
Return "柒"
Case "8"
Return "捌"
Case "9"
Return "玖"
End Select
End Function
Private Function ConvertToChinese(ByVal dblJE As Decimal) As String
Try
Dim value As String
value = Format(dblJE, "##########################.00")
value = Replace(value, ".", "")
Dim dw(17) As String
dw(0) = "分"
dw(1) = "角"
dw(2) = "元"
dw(3) = "拾"
dw(4) = "佰"
dw(5) = "仟"
dw(6) = "万"
dw(7) = "拾"
dw(8) = "佰"
dw(9) = "仟"
dw(10) = "亿"
dw(11) = "拾"
dw(12) = "佰"
dw(13) = "仟"
dw(14) = "万"
dw(15) = "拾"
dw(16) = "佰"
dw(17) = "仟"
Dim Stack1 As New Stack()
Dim stack2 As New Stack()
Dim I As Integer For I = value.Length To 1 Step -1
Stack1.Push(Mid(value, I, 1))
stack2.Push(dw(value.Length - I))
Next Dim str As String
While Stack1.Count > 0
Dim a As String
a = Stack1.Pop()
If a <> "0" Then
str = str & getChinese(a) & stack2.Pop()
Else
If Stack1.Count > 0 Then
Dim b As String
b = stack2.Pop()
If b = "亿" Or b = "万" Or b = "元" Then
str = str & b
End If
If Stack1.Peek() <> "0" Then
str = str & getChinese(a)
End If
Else
stack2.Pop()
End If
End If
End While
If str.Substring(str.Length - 1, 1) <> "分" Then
str = str & "整"
End If
Return str
Catch exp As Exception
MsgBox("转换成大写金额失败:" & Chr(13) & exp.ToString, MsgBoxStyle.Critical, "错误")
Return ""
End Try
End Function
'获得大写金额
Private Function getDXJE(ByVal obj As Object) As String
If IsDBNull(obj) Then
Return ""
Else
If IsNumeric(obj) Then
Return ConvertToChinese(obj)
Else
Return ""
End If
End If
End Function
希望高手提供一个解决00问题的思路。declarein_str varchar2(15):='440066.00'; -- 输入字符
out_str varchar2(50);
str_bing varchar2(50);
time_str varchar2(50);
loop_nunber integer:=0;
toatal integer:=0;
length_number integer:=length(in_str); -- 计算字符长度
point integer:=null;
begin for i in 1..length_number loop
out_str:=substr(in_str,i,1); -- 一个一个字符输出
toatal:=toatal+1;
DBMS_OUTPUT.PUT_LINE('the str is 第一次循环 '|| '"' || out_str || '"' || i );
if out_str = '.' then --判断是否有小数点,如果有计算出第几位的位
point:=i; --如果没有point为空
else
point:=0;
end if;
exit when out_str = '.'; -- 在出现小数点时跳出循环
end loop ;
-- 如果不够12位的前面补“0”使得位数达到12位
if point > 0 then
toatal:=toatal-1;
end if;
if toatal = 12 then
loop_nunber := 12 ;
elsif toatal < 12 then
loop_nunber := 12 - toatal;
for i in 1..loop_nunber loop
time_str:=time_str||'0';
end loop;
in_str:=time_str||in_str;
end if ;
dbms_output.put_line( ' in_str '||in_str||' 位');
for i in 1..length(in_str) loop
out_str:=substr(in_str,i,1); -- 一个一个字符输出
DBMS_OUTPUT.PUT_LINE('the str is '|| '"' || out_str || '"' || i );
if out_str = '1' then --转换成中文大写
str_bing :=str_bing || '壹';
elsif out_str = '2' then
str_bing :=str_bing || '贰';
elsif out_str = '3' then
str_bing :=str_bing || '叁';
elsif out_str = '4' then
str_bing :=str_bing || '肆';
elsif out_str = '5' then
str_bing :=str_bing || '伍';
elsif out_str = '6' then
str_bing :=str_bing || '陆';
elsif out_str = '7' then
str_bing :=str_bing || '柒';
elsif out_str = '8' then
str_bing :=str_bing || '捌';
elsif out_str = '9' then
str_bing :=str_bing || '玖';
elsif out_str = '0' then
str_bing :=str_bing || '零';
end if;
exit when out_str = '.'; -- 在出现小数点时跳出循环
end loop;
DBMS_OUTPUT.PUT_LINE( ' 字符 ' || in_str || ' 的中文大写是 '|| str_bing );
dbms_output.put_line( ' 小数点是第 '||point||' 位');
dbms_output.put_line( ' 小数点前共 '||toatal||' 位');
-- 加入单位
time_str:=null;
for i in 1..length(in_str) loop
out_str:=substr(str_bing,i,1); -- 一个一个字符输出
time_str:=time_str||out_str;
if i = 1 or i = 5 or i = 9 then
time_str:=time_str || '千';
elsif i = 2 or i = 6 or i = 10 then
time_str:=time_str || '百';
elsif i = 3 or i = 7 or i = 11 then
time_str:=time_str || '拾';
elsif i = 4 then
time_str:=time_str || '亿';
elsif i = 8 then
time_str:=time_str || '万';
elsif i = 12 then
time_str:=time_str || '元';
end if;
exit when out_str = '.'; -- 在出现小数点时跳出循环
dbms_output.put_line( ' time_str '||time_str);
end loop;
out_str:=substr(time_str,-toatal*2,24); -- 除去应为不足儿补的零
dbms_output.put_line( ' out_str '||out_str);
end;
Mxs = Mxs.Replace(".", "")
Mxs = Mxs.Replace(",", "") Dim Num1() As String = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}
Dim Num2() As String = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟"}
Dim Temp1() As String = {"零拾", "零佰", "零仟", "零零", "零元", "零角", "零分", "零万", "万零", "零亿", "亿零", "亿万"}
Dim temp2() As String = {"零", "零", "零", "零", "元", "", "", "万", "万", "亿", "亿", "亿"}
If Trim(Mxs) = "" Then
Return "零元"
End If Dim i As Integer
Dim strTemp As String = "" For i = 0 To Mxs.Length - 1
If i > 17 Then
Return "不可能,你输入的金额太大!"
End If Dim c As Char = Mxs.Chars(Mxs.Length - 1 - i) If c <> "." Then
strTemp = strTemp.Insert(0, Num2(i))
strTemp = strTemp.Insert(0, Num1(CInt(c.ToString)))
End If
Next Dim j As Integer For i = 0 To CInt(Mxs.Length / 2)
For j = 0 To 9
strTemp = strTemp.Replace(Temp1(j), temp2(j))
Next
Next
Return strTemp End Function