如何用Matlab将人民币小写数字转换为大写
【转换函数原型】为:function[MoneyCText,OK,Msg]=MoneyValueToCText(MoneyValue)MoneyValue–输入参数,阿拉...
【转换函数原型】为:
function [MoneyCText, OK, Msg] = MoneyValueToCText(MoneyValue)
MoneyValue – 输入参数,阿拉伯数字表示的金额,为一个字符串(注意这一点);
MoneyCText – 输出参数,转换后的大写金额字符串;
OK – 输出参数,转换正确返回true,否则返回false(如输入数字范围不对,格式不对等);
Msg – 输出参数,返回信息,如果转换正确值为空,否则为对应的错误信息,如“输入格式不正确!”(这个错误信息具体值可以自行设计);
(2)函数实现时必须实现如下功能,并在测试脚本中反映出来:
(2-1)输入数字以“元”为单位,精确到“分”(即输入数字为小数点后两位),最小值为1分,最大值为1亿元;据此进行范围检查,否则输出错误信息“输入金额不在合法范围!”;
(2-2)输入数字要进行格式检查,即输入的字符串种只能包含数字和逗点分隔符“.”,否则是非法的,如“123$%.34”就是一个非法输入金额值;
(2-3)转换后的字符串末尾为“整”,比如“123.56”转换为“壹佰贰拾叁元伍角陆分整”。 展开
function [MoneyCText, OK, Msg] = MoneyValueToCText(MoneyValue)
MoneyValue – 输入参数,阿拉伯数字表示的金额,为一个字符串(注意这一点);
MoneyCText – 输出参数,转换后的大写金额字符串;
OK – 输出参数,转换正确返回true,否则返回false(如输入数字范围不对,格式不对等);
Msg – 输出参数,返回信息,如果转换正确值为空,否则为对应的错误信息,如“输入格式不正确!”(这个错误信息具体值可以自行设计);
(2)函数实现时必须实现如下功能,并在测试脚本中反映出来:
(2-1)输入数字以“元”为单位,精确到“分”(即输入数字为小数点后两位),最小值为1分,最大值为1亿元;据此进行范围检查,否则输出错误信息“输入金额不在合法范围!”;
(2-2)输入数字要进行格式检查,即输入的字符串种只能包含数字和逗点分隔符“.”,否则是非法的,如“123$%.34”就是一个非法输入金额值;
(2-3)转换后的字符串末尾为“整”,比如“123.56”转换为“壹佰贰拾叁元伍角陆分整”。 展开
展开全部
clear;clc;
a1='壹贰叁肆伍陆柒捌玖';
a2={ '元' '拾' '佰' '仟' '万' '拾万' '佰万' '仟万' '亿'};
a3={'角' '分'};
s=200002.20;
ss=num2str(s*100);
N=length(ss);
s1=ss(1:N-2);
s2=ss(N-1:N);
x1=[];
x2=[];
for i=1:N-2
if ss(i)~='0'
x1=[x1 a1(str2num(s1(i))) a2{N-2+1-i}]
elseif x1(length(x1))~='零'
x1=[x1 '零']
end
end
if x1(length(x1))=='零'
x1=[x1(1:length(x1)-1) '元']
end
if s2(1)~='0' && s2(2)~='0'
x2=[a1(str2num(s2(1))) '角' a1(str2num(s2(2))) '分整']
elseif s2(1)=='0' && s2(2)~='0'
x2=['零' a1(str2num(s2(2))) '分整']
elseif s2(1)~='0' && s2(2)=='0'
x2=[a1(str2num(s2(1))) '角整']
else
x2='整'
end
x=[x1 x2]
这个是程序的主体部分,其他的你可以自己加上了!
a1='壹贰叁肆伍陆柒捌玖';
a2={ '元' '拾' '佰' '仟' '万' '拾万' '佰万' '仟万' '亿'};
a3={'角' '分'};
s=200002.20;
ss=num2str(s*100);
N=length(ss);
s1=ss(1:N-2);
s2=ss(N-1:N);
x1=[];
x2=[];
for i=1:N-2
if ss(i)~='0'
x1=[x1 a1(str2num(s1(i))) a2{N-2+1-i}]
elseif x1(length(x1))~='零'
x1=[x1 '零']
end
end
if x1(length(x1))=='零'
x1=[x1(1:length(x1)-1) '元']
end
if s2(1)~='0' && s2(2)~='0'
x2=[a1(str2num(s2(1))) '角' a1(str2num(s2(2))) '分整']
elseif s2(1)=='0' && s2(2)~='0'
x2=['零' a1(str2num(s2(2))) '分整']
elseif s2(1)~='0' && s2(2)=='0'
x2=[a1(str2num(s2(1))) '角整']
else
x2='整'
end
x=[x1 x2]
这个是程序的主体部分,其他的你可以自己加上了!
更多追问追答
追问
其他的怎么加啊?各式不是按我给你的来的啊?
s1=ss(1:N-2);
s2=ss(N-1:N);
这两句什么意思?这里面怎么没有disp语句啊?
x1=[x1 a1(str2num(s1(i))) a2{N-2+1-i}]
这一句就是显示的吗?
追答
这就是主体部分了,非法输入的判断啊什么的都很简单的,自己写一下吧。s1和s2就是把整数部分和小数部分分开,以便编程!最后的x就是disp的意思
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询