VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 916|回复: 3

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

[复制链接]

3

主题

10

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-20 12:40:01 | 显示全部楼层 |阅读模式
感觉很简单 但是没思路 望高人指教下。。
回复

使用道具 举报

1

主题

20

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-1-28 22:36:02 | 显示全部楼层
以前曾有人发过~

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);

    }
}
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-29 17:00:01 | 显示全部楼层
<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>
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-31 16:09:01 | 显示全部楼层
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
%>  

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表