首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

人民币数字转化为文字,如1235如何输出一千二百三十五元

2011-12-31 
人民币数字转化为文字,如1235怎么输出一千二百三十五元?感觉很简单但是没思路望高人指教下。。[解决办法]以

人民币数字转化为文字,如1235怎么输出一千二百三十五元?
感觉很简单   但是没思路   望高人指教下。。

[解决办法]
以前曾有人发过~

import java.awt.*;
import java.awt.event.*;

class Test
{
public static void main(String[] args)
{
String num = "零壹贰叁肆伍陆柒捌玖 ";
String dw = "圆拾佰仟万亿 ";
String m = "30020.23 ";
String mm[] = null;
mm = m.split( "\\. ");
String money = mm[0];

String result = num.charAt(Integer.parseInt( " " + mm[1].charAt(0))) +
"角 " +
num.charAt(Integer.parseInt( " " + mm[1].charAt(1))) + "分 ";

for (int i = 0; i < money.length(); i++)
{
String str = " ";
int n = Integer.parseInt(money.substring(money.length() - i - 1,
money.length() - i));
str = str + num.charAt(n);
if (i == 0)
{
str = str + dw.charAt(i);
}
else if ( (i + 4) % 8 == 0)
{
str = str + dw.charAt(4);
}
else if (i % 8 == 0)
{
str = str + dw.charAt(5);
}
else
{
str = str + dw.charAt(i % 4);
}
result = str + result;
}
result = result.replaceAll( "零([^圆]{1}) ", "零 ");
result = result.replaceAll( "零+ ", "零 ");
result = result.replaceAll( "零圆 ", "圆 ");
System.out.println(result);

}
}

[解决办法]
<script language= "javascript ">
var strArray = new Array();
strArray[0] = "元 "
strArray[1] = "十 "
strArray[2] = "百 "
strArray[3] = "千 "

var str = "1235 ";

var len = str.length;

var ss = " ";
for(i=1;i <=len;i++){
ss += str.substring(i-1,i)+strArray[len-i];
}
alert(ss);
</script>
[解决办法]
1.(C#):
//加到类的定义部分
private static string[] cstr={ "零 ", "壹 ", "贰 ", "叁 ", "肆 ", "伍 ", "陆 ", "柒 ", "捌 ", "玖 "};
private static string[] wstr={ " ", " ", "拾 ", "佰 ", "仟 ", "萬 ", "拾 ", "佰 ", "仟 ", "億 ", "拾 ", "佰 ", "仟 "};
//数字必须在12位整数以内的字符串
//调用方式如:Label1.Text=ConvertInt( "数字字符串 ");

public string ConvertInt(string str)
{
int len=str.Length;
int i;
string tmpstr,rstr;
rstr= " ";
for(i=1;i <=len;i++)
{
tmpstr=str.Substring(len-i,1);
rstr=string.Concat(cstr[Int32.Parse(tmpstr)]+wstr[i],rstr);
}
rstr=rstr.Replace( "拾零 ", "拾 ");
rstr=rstr.Replace( "零拾 ", "零 ");
rstr=rstr.Replace( "零佰 ", "零 ");
rstr=rstr.Replace( "零仟 ", "零 ");
rstr=rstr.Replace( "零萬 ", "萬 ");
for(i=1;i <=6;i++)
rstr=rstr.Replace( "零零 ", "零 ");
rstr=rstr.Replace( "零萬 ", "零 ");


rstr=rstr.Replace( "零億 ", "億 ");
rstr=rstr.Replace( "零零 ", "零 ");
rstr+= "圆整 ";
return rstr;
}




2.
转换大小写金额的ASP代码
<%
dim a '要转换成大写的金额
dim atoc '转换之后的值
Dim String1 '如下定义
Dim String2 '如下定义
Dim String3 '从原A值中取出的值
Dim I '循环变量
Dim J 'A的值乘以100的字符串长度
Dim Ch1 '数字的汉语读法
Dim Ch2 '数字位的汉字读法
Dim nZero '用来计算连续的零值是几个

String1 = "零壹贰叁肆伍陆柒捌玖 "
String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分 "
nZero = 0

If InStr(1, CStr(a * 100), ". ") <> 0 Then
err.Raise 5000, , "此函数( AtoC() )只能转换小数点后有两位以内的数! "
End If

J = Len(CStr(a * 100))
String2 = Right(String2, J) '取出对应位数的STRING2的值

For I = 1 To J
String3 = Mid(a * 100, I, 1) '取出需转换的某一位的值

If I <> (J - 3) + 1 And I <> (J - 7) + 1 And I <> (J - 11) + 1 And I <> (J - 15) + 1 Then
If String3 = 0 Then
Ch1 = " "
Ch2 = " "
nZero = nZero + 1
ElseIf String3 <> 0 And nZero <> 0 Then
Ch1 = "零 " & Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
Else
Ch1 = Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
End If
Else '该位是万亿,亿,万,元位等关键位
If String3 <> 0 And nZero <> 0 Then
Ch1 = "零 " & Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
ElseIf String3 <> 0 And nZero = 0 Then
Ch1 = Mid(String1, clng(String3) + 1, 1)
Ch2 = Mid(String2, I, 1)
nZero = 0
ElseIf String3 = 0 And nZero > = 3 Then
Ch1 = " "
Ch2 = " "
nZero = nZero + 1
Else
Ch1 = " "
Ch2 = Mid(String2, I, 1)
nZero = nZero + 1
End If

If I = (J - 11) + 1 Or I = (J - 3) + 1 Then '如果该位是亿位或元位,则必须写上
Ch2 = Mid(String2, I, 1)
End If

End If
AtoC = AtoC & Ch1 & Ch2

If I = J And String3 = 0 Then '最后一位(分)为0时,加上 "整 "
AtoC = AtoC & "整 "
End If

Next
if a=0 then
atoc= "零元整 "
end if
%>




3.
<!--#include file=common.asp-->
<%
dim tmpnum
'从第一张页面传过来的小写金额
tmpnum=request( "page1num ")
'调用并显示大写金额
response.write rmb(cdbl(tmpnum))
response.end
%>


common.asp
<%
Function rmb(num)

num = FormatNumber(num, 2)
Dim numList
Dim rmbList
Dim numLen
Dim numChar
Dim numstr
Dim n
Dim n1, n2
Dim hz
numList = "零壹贰叁肆伍陆柒捌玖 "
rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万 "

If num > 9999999999999.99 Then
rmb = "超出范围的人民币值 "
Exit Function
End If

numstr = CStr(num * 100)
numLen = Len(numstr)
n = 1
Do While n <= numLen
numChar = CInt(Mid(numstr, n, 1))
n1 = Mid(numList, numChar + 1, 1)
n2 = Mid(rmbList, numLen - n + 1, 1)
If Not n1 = "零 " Then
hz = hz + CStr(n1) + CStr(n2)
Else
If n2 = "亿 " Or n2 = "万 " Or n2 = "元 " Or n1 = "零 " Then
Do While Right(hz, 1) = "零 "
hz = Left(hz, Len(hz) - 1)
Loop
End If
If (n2 = "亿 " Or (n2 = "万 " And Right(hz, 1) <> "亿 ") Or n2 = "元 ") Then


hz = hz + CStr(n2)
Else
If Left(Right(hz, 2), 1) = "零 " Or Right(hz, 1) <> "亿 " Then
hz = hz + n1
End If
End If
End If
n = n + 1
Loop
Do While Right(hz, 1) = "零 "
hz = Left(hz, Len(hz) - 1)
Loop
If Right(hz, 1) = "元 " Then
hz = hz + "整 "
End If
rmb = hz
End Function

%>


这个版本解决了小数位不能到分的问题,处理方式符合会计方式!




4.
金额大小写转换的asp完全无错版本


<!--#include file=common.asp-->
<%
dim tmpnum
'从第一张页面传过来的小写金额
tmpnum=request( "page1num ")
'调用并显示大写金额
response.write rmb(cdbl(tmpnum))
response.end
%>


金额大小写转换的asp完全无错版本


<!--#include file=common.asp-->
<%
dim tmpnum
'从第一张页面传过来的小写金额
tmpnum=request( "page1num ")
'调用并显示大写金额
response.write rmb(cdbl(tmpnum))
response.end
%>


common.asp
<%
Function rmb(num)

num = FormatNumber(num, 2)
Dim numList
Dim rmbList
Dim numLen
Dim numChar
Dim numstr
Dim n
Dim n1, n2
Dim hz
numList = "零壹贰叁肆伍陆柒捌玖 "
rmbList = "分角元拾佰仟万拾佰仟亿拾佰仟万 "

If num > 9999999999999.99 Then
rmb = "超出范围的人民币值 "
Exit Function
End If

numstr = CStr(num * 100)
numLen = Len(numstr)
n = 1
Do While n <= numLen
numChar = CInt(Mid(numstr, n, 1))
n1 = Mid(numList, numChar + 1, 1)
n2 = Mid(rmbList, numLen - n + 1, 1)
If Not n1 = "零 " Then
hz = hz + CStr(n1) + CStr(n2)
Else
If n2 = "亿 " Or n2 = "万 " Or n2 = "元 " Or n1 = "零 " Then
Do While Right(hz, 1) = "零 "
hz = Left(hz, Len(hz) - 1)
Loop
End If
If (n2 = "亿 " Or (n2 = "万 " And Right(hz, 1) <> "亿 ") Or n2 = "元 ") Then
hz = hz + CStr(n2)
Else
If Left(Right(hz, 2), 1) = "零 " Or Right(hz, 1) <> "亿 " Then
hz = hz + n1
End If
End If
End If
n = n + 1
Loop
Do While Right(hz, 1) = "零 "
hz = Left(hz, Len(hz) - 1)
Loop
If Right(hz, 1) = "元 " Then
hz = hz + "整 "
End If
rmb = hz
End Function

%>


5.
<%function Money(thenumber)
dim Money,i,String1,String2,length,checkp&acute;定义变量
dim one(),onestr()&acute;定义数组

String1 = "零壹贰叁肆伍陆柒捌玖 "
String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分厘毫 "

checkp=instr(thenumber, ". ")&acute;判断是否含有小数位
if checkp <> 0 then
thenumber=replace(thenumber, ". ", " ")&acute;去除小数位
end if

length=len(thenumber) &acute;取得数据长度
redim one(length-1)&acute;重新定义数组大小
redim onestr(length-1)&acute;重新定义数组大小

for i=0 to length-1

one(i)=mid(thenumber,i+1,1) &acute;循环取得每一位的数字
one(i)=mid(string1,one(i)+1,1)&acute;循环取得数字对应的大写


if checkp=0 then
&acute;不含有小数的数据其数字对应的单位
onestr(i)=mid(string2,14-length+i,1)
else
&acute;含有小数的数据其数字对应的单位
onestr(i)=mid(string2,15-length+i+len(thenumber)-checkp,1)
end if

one(i)=one(i)&onestr(i)&acute;将数字与单位组合
next

Money=replace(join(one), " ", " ") &acute;取得数组中所有的元素,并连接起来
Money=replace(Money, "零元 ", "元 ")


Money=replace(Money, "零万 ", "万 ")
Money=replace(Money, "零亿 ", "亿 ")
Money=replace(Money, "零仟 ", "零 ")
Money=replace(Money, "零佰 ", "零 ")
Money=replace(Money, "零拾 ", "零 ")

do while not instr(Money, "零零 ")=0
Money=replace(Money, "零零 ", "零 ")
loop

response.write Money &acute;显示结果
end function
%>

热点排行
Bad Request.