小写金额大小写转换器转大写怎么弄

(stillwater)
(大数据魔镜)
(圆圈小圆)
第三方登录:将小写数字金额转成大写金额将小写数字金额转成大写金额
procedure TfmBMZC.BitBtn2Click(Sender: TObject); //金额转换const& chNum : array[0..9] of string = ('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');& chBit : array[0..3] of string = ('圆','拾','佰','仟');var& y, m, d : W& s :& len, n , tmp:& bIsZero : Bbegin& DecodeDate(Date, y, m, d);& jfjeChange();& with fmPrint do begin&&& qrYear.Caption:=IntToStr(y);&&& qrMonth.Caption:=IntToStr(m);&&& qrDay.Caption:=IntToStr(d);&&& qrName.Caption:=EdName.T&&& qrXMoney.Caption:=//对照表生成小写金额的大写&&& bIsZero:=&&& n:=Pos('.', jf); //小数点前的处理&&& if n=0 then&&&&& len:=Length(jf)&&& else&&&&& len:=n-1;&&& for n:=1 to len do begin&&&&& tmp:=StrToInt(jf[n]);&&&&& if tmp=0 then begin&&&&&&& if n&len then&&&&&&&&& bIsZero:=true&&&&&&& else if n=len then&&&&&&&&& s:=s + chBit[len-n];&&&&& end&&&&& else begin&&&&&&& if bIsZero then begin&&&&&&&&& s:=s+chNum[0]+chNum[tmp] + chBit[len-n];&&&&&&&&& bIsZero:=&&&&&&& end&&&&&&& else&&&&&&&&& s:=s+chNum[tmp] + chBit[len-n];&&&&&&&&&&& if Length(jf)&len then begin //小数点后的处理&&&&& if len+2&=Length(jf) then begin&&&&&&& tmp:=StrToInt(jf[len+2]);&&&&&&& if tmp=0 then&&&&&&&&& s:=s+'零'&&&&&&& else&&&&&&&&& s:=s+chNum[tmp]+'角';&&&&&&&&&& if len+3&=Length(jf) then&&&&&&& s:=s+chNum[StrToInt(jf[len+3])]+'分';&&&&&& qrDMoney.Caption:=s;&&& qrShow.Caption:='辅修报名注册费。';&&& qrHandler.Caption:='僧格淋沁';&&& QuickRep1.P&procedure TfmBMZC.jfjeChange();& //对输入框中内容的控制var& tmp :begin//计算"缴费金额"& jf:=Trim(Copy(mEdJFJE.Text, 1, 4));& if jf=' then //"元"为空&&& jf:='0';& tmp:=Trim(Copy(mEdJFJE.Text, 7, 1));& if tmp=' then begin file://"角"为空&&& tmp:=Trim(Copy(mEdJFJE.Text, 10, 1));&&& if tmp&&' then //填写了"分"&&&&& jf:=jf+'.0'+& end& else begin //填写了"角"&&& jf:=jf+'.'+&&& tmp:=Trim(Copy(mEdJFJE.Text, 10, 1));&&& if tmp&&' then //填写了"分"&&&&& jf:=jf+&& jf:=FloatToStr(StrToFloat(jf));end. &请教金额小写转换成大写怎么写?
本回答由提问者推荐
var sogou_ad_id=731547;
var sogou_ad_height=160;
var sogou_ad_width=690;博客分类:
最近需要oracle存储过程完成功能:传入金额,转换成大写金额,如传入3002.03,转换成 叁仟零贰圆零叁分,本来想自己写,但无奈越写越繁琐,于是从网上找到几位大牛写的,很强大,学习了。
(原文链接:.cn/s/blog_4b9e847f010006rf.html)
create or replace function F_upper_money(p_num in number default null)
return nvarchar2 is
/*Ver:1.0 Created By xsb on
将金额数字(单位元)转换为大写(采用从低至高算法)
数字整数部分不得超过16位,可以是负数。
Ver:1.1 Modified By xsb on
For:个位数处理也放在For循环中。
Ver:1.2 Modified By xsb on
For:分后不带整字。
Ver:1.3 Modified By xsb on
For:完善测试用例。
SET HEAD OFF
SET FEED OFF
select '无参数时='||f_upper_money()
select 'null='||f_upper_money(null)
select '0='||f_upper_money(0)
select '0.01='||f_upper_money(0.01)
select '0.126='||f_upper_money(0.126)
select '01.234='||f_upper_money(01.234)
select '10='||f_upper_money(10)
select '100.1='||f_upper_money(100.1)
select '100.01='||f_upper_money(100.01)
select '10000='||f_upper_money(10000)
select '10012.12='||f_upper_money(10012.12)
select '='||f_upper_money()
select '.901='||f_upper_money(.901)
select '.001='||f_upper_money(.001)
select '-='||f_upper_money(-)
select '='||f_upper_money()
nvarchar2(100); --返回字符串
nvarchar2(100) := to_char(abs(round(p_num, 2))); --转换数字为小数点后2位的字符(正数)
nvarchar2(100); --小数点左边的数字
nvarchar2(2); --小数点右边的数字
nchar(10) := '零壹贰参肆伍陆柒捌玖'; --数字大写
nchar(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)
number(1) := 1; --前一位上的数字
num_current number(1); --当前位上的数字
number := 0; --当前数字位数
if p_num is null then
--转换数字为null时返回null
select to_char(nvl(substr(to_char(num_round),
decode(instr(to_char(num_round), '.'),
length(num_round),
instr(to_char(num_round), '.') - 1)),
into num_left
--取得小数点左边的数字
select substr(to_char(num_round),
decode(instr(to_char(num_round), '.'),
length(num_round) + 1,
instr(to_char(num_round), '.') + 1),
into num_right
--取得小数点右边的数字
if length(num_left) & 16 then
return '**********';
--数字整数部分超过16位时
--采用从低至高的算法,先处理小数点右边的数字
if length(num_right) = 2 then
if to_number(substr(num_right, 1, 1)) = 0 then
result := '零' ||
substr(str1, to_number(substr(num_right, 2, 1)) + 1, 1) || '分';
result := substr(str1, to_number(substr(num_right, 1, 1)) + 1, 1) || '角' ||
substr(str1, to_number(substr(num_right, 2, 1)) + 1, 1) || '分';
elsif length(num_right) = 1 then
result := substr(str1, to_number(substr(num_right, 1, 1)) + 1, 1) || '角整';
result := '整';
--再处理小数点左边的数字
for i in reverse 1 .. length(num_left) loop
--(从低至高)
:= num_count + 1; --当前数字位数
num_current := to_number(substr(num_left, i, 1)); --当前位上的数字
if num_current & 0 then
--当前位上数字不为0按正常处理
result := substr(str1, num_current + 1, 1) ||
substr(str2, num_count, 1) ||
--当前位上数字为0时
if mod(num_count - 1, 4) = 0 then
--当前位是元、万或亿时
:= substr(str2, num_count, 1) ||
num_pre := 0; --元、万,亿前不准加零
if num_pre & 0 or length(num_left) = 1 then
--上一位数字不为0或只有个位时
result := substr(str1, num_current + 1, 1) ||
num_pre := num_
if p_num & 0 then
--转换数字是负数时
result := '负' ||
when others then
raise_application_error(-20001, '数字转换大写出现错误!' || sqlerrm);
(原文链接:/sunbo05/item/e50e6cc2f07d)
CREATE OR REPLACE FUNCTION money_to_chinese(money IN VARCHAR2)
RETURN VARCHAR2 IS
VARCHAR2(12);
m_string VARCHAR2(60) := '分角圆拾佰仟万拾佰仟亿';
n_string VARCHAR2(40) := '壹贰叁肆伍陆柒捌玖';
b_string VARCHAR2(80);
NUMBER(3);
NUMBER(3);
NUMBER(12);
NUMBER(3);
VARCHAR2(10);
l_money := ABS(money);
IF money & 0 THEN
l_sign := '负';
l_sign := '';
:= ROUND(l_money, 2) * 100;
c_money := RTRIM(LTRIM(TO_CHAR(tmp, '')));
:= LENGTH(c_money);
is_zero := TRUE;
z_count := 0;
WHILE i & len LOOP
i := i + 1;
n := SUBSTR(c_money, i, 1);
IF n = '0' THEN
IF len - i = 6 OR len - i = 2 OR len = i THEN
IF is_zero THEN
b_string := SUBSTR(b_string, 1, LENGTH(b_string) - 1);
IF len - i = 6 THEN
b_string := b_string || '万';
IF len - i = 2 THEN
b_string := b_string || '圆';
IF len = i THEN
b_string := b_string || '整';
z_count := 0;
IF z_count = 0 THEN
b_string := b_string || '零';
z_count := z_count + 1;
b_string := b_string || SUBSTR(n_string, TO_NUMBER(n), 1) ||
SUBSTR(m_string, len - i + 1, 1);
b_string := l_sign || b_
WHEN OTHERS THEN
RETURN(SQLERRM);
xiaolong0211
浏览: 220469 次
来自: 青岛
特别感谢,找了好处都没处理好的问题。
果然如楼主所说啊,弄了好久,终于搞定了!我的主要问题就是在于u ...
zhaoling129 写道xiaolong0211 写道zh ...
xiaolong0211 写道zhaopeihehe 写道er ...
woaimingde 写道 必须顶。不过要是还没有装上,要请楼 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'查看: 4012|回复: 12
如何输入小写金额对应的方格自动转换为大写
阅读权限20
在线时间 小时
本帖最后由 lwa 于
21:33 编辑
(4.01 KB, 下载次数: 26)
21:25 上传
点击文件名下载附件
各们大虾:
& && &&&小弟因工作需要,每天要填写表格中的数据。我想如何输入小写金额对应的方格自动转换为大写,提高效率。在表格中输入5272.00,对应的大写格子能不能自动识别填写?不能哪位大虾可以帮小弟一把,不胜感谢~
& && && &小弟今晚认真学习了论坛关于票据打印的文章,照着做了一个,但却只能显示小写,不能转换为大写。求教。为附件2
21:33 上传
点击文件名下载附件
4.11 KB, 下载次数: 45
阅读权限70
在线时间 小时
论坛搜索大写金额,大把的示例和公式。
阅读权限20
在线时间 小时
人事难料 发表于
论坛搜索大写金额,大把的示例和公式。
难度在于一个方格的小写,对应几个方格要自动识别。
阅读权限30
在线时间 小时
扔个附件上来。
阅读权限20
在线时间 小时
sw=andy 发表于
扔个附件上来。
实在不好意思,没有看附件没有上传成功。
阅读权限30
在线时间 小时
=NUMBERSTRING(--MID(TEXT($M$13,&.00&),COLUMN(A1),1),2)
小数点“.&怎么处理?
阅读权限20
在线时间 小时
sw=andy 发表于
=NUMBERSTRING(--MID(TEXT($M$13,&.00&),COLUMN(A1),1),2)
小数点“.&怎么处理?
附件二中解决了这个问题,但小写无法转换成大写。
阅读权限30
在线时间 小时
=NUMBERSTRING(IF($M13,LEFT(RIGHT(& ¥&&$M13*100,COLUMNS(M:$S))),&&),2)
外套一个NUMBERSTRING
阅读权限20
在线时间 小时
sw=andy 发表于
=NUMBERSTRING(IF($M13,LEFT(RIGHT(& ¥&&$M13*100,COLUMNS(M:$S))),&&),2)
外套一个NUMBERSTRING
套哪?求附件,
阅读权限20
在线时间 小时
哪位大虾可以把附件二的小写金额转换成大写?
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师

我要回帖

更多关于 金额大小写转换 的文章

 

随机推荐