数字转换大写人民币的delphi实现

Delphi 金额转大写 RAD Studio 10.2.3 测试√ 使用实例 procedure TForm_Tips.Button_MoneyConvertClick(Sender: TObject); var mMoneyNum: Real; begin mMoneyNum := 00000000; // 零元整 Memo_Log.Lines.Add(MoneyConvert(mMoneyNum)); mMoneyNum := 00100053; // 壹拾万零伍拾叁元整 Mem 阅读详情

文章来源:IT工程信息网  http://www.systhinker.com/html/09/n-12309.html

之前用Access作一个应用,但找不到货币转换成大写人民币的功能(当然可以通过excel 转换,但不在一个应用上,放弃)。以为比较简单,自己试写,谁知用了两个晚上,才基本实现,但没有小数点(元)以下货币的转换。也没有兆的判断。而且对字符的合法性也没有检验。今天有时间,将其完善一下。(可能还会有考虑不周的地方)

思路:

1、判断是否带有小数点的金额,如果是,就找出小数点所在数据。该位字符不进行转换。

2、小数点前的作为整数位,进行转换。整数位的每一位都有表示金额的级别:拾、佰、仟。而且还有万、亿的级别。

3、小数点后的作为角、分、厘处理。

4、如果有连续的零,只显示一个零。如50006,显示为伍万零陆。如果是发生在拾、佰、仟位,该零还要去掉。

 

000function TForm1.changeRmb(const strRmb:string):string; 
001var 
002  txt,strhighlevel:string; 
003  i,n,m,ilen,ipos:Integer;    //n记录整数部分长度,m记录分数部分长度 
004   strarray,strlevel:array of string; 
005   p:pchar; 
006   ispoint:boolean;//判断是否有小数点 
007begin 
008  ispoint:=false; 
009  result:=''; 
010  ipos:=0; 
011  m:=0; 
012  txt:=Trim(strRmb); 
013  i:=1; 
014   p:=PChar(txt); 
015//去除开头的0,以及. 
016if ((txt[1]='0') and (txt[2]<>'.')) or (txt[1]='.') then 
017begin 
018   ShowMessage('第1位不能为0或者是.,退出操作'); 
019   exit; 
020end; 
021//检查字符的合法性 
022while (i<length(txt))do 
023begin 
024if (p^>'9') or ((p^<'0') and (P^<>'.'))  then //ord('.')=46 
025begin 
026          ShowMessage(PChar('第'+inttostr(i)+'位包含非数字字符,将退出操作')); 
027          Exit; 
028end; 
029if P^='.' then 
030if ispoint then 
031begin 
032         showmessage('太多小数点,将退出!'); 
033         exit; 
034end 
035else 
036begin 
037        ipos:=i; 
038        ispoint:=true; 
039end; 
040      Inc(p); 
041      Inc(i); 
042end;//while 
043   ilen:=Length(txt); 
044if ispoint then 
045begin 
046     n:=ipos-1; 
047     m:=ilen-ipos; 
048end 
049else 
050    n:=ilen; 
051//判断是否超过万,或亿 
052if m>3 then 
053begin 
054       ShowMessage('小数点后位数超过3,无法转换!'); 
055       Exit; 
056end; 
057  SetLength(strarray,ilen+8); 
058  SetLength(strlevel,ilen+8); 
059for i:=iLen downto 1 do 
060begin 
061if txt[i]<>'.' then 
062case strtoint(txt[i]) of 
0631:strarray[i]:='壹'; 
0642:strarray[i]:='贰'; 
0653:strarray[i]:='叁'; 
0664:strarray[i]:='肆'; 
0675:strarray[i]:='伍'; 
0686:strarray[i]:='陆'; 
0697:strarray[i]:='柒'; 
0708:strarray[i]:='捌'; 
0719:strarray[i]:='玖'; 
0720: 
073begin 
074         strarray[i]:='零'; 
075if i<ilen then //如果低位也为零,低位零不显示 
076if (strarray[i+1]= '') or (strarray[i+1]= '零') then 
077begin 
078//strarray[i+1]:= ''; 
079              strarray[i]:= ''; 
080end; 
081if i=n then strarray[i]:=''; 
082         strlevel[i]:=''; 
083end; 
084end; //case 
085end; 
086//先处理 小数点部分 
087if m>0 then 
088begin 
089for i:=m downto 1 do 
090begin 
091        strlevel[ipos+i]:=''; 
092case i-1 of 
0930: 
094if  txt[ipos+i]='0' then 
095                strarray[ipos+i]:='' 
096else 
097               strlevel[ipos+i]:='角'; 
0981: 
099if  txt[ipos+i]='0' then 
100                  strarray[ipos+i]:='' 
101else 
102               strlevel[ipos+i]:='分'; 
1032: 
104if  txt[ipos+i]='0' then 
105               strarray[ipos+i]:='' 
106else   strlevel[ipos+i]:='厘'; 
107end; 
108       Result:=strarray[ipos+i]+strlevel[ipos+i]+result; 
109end; 
110end; 
111if ispoint and (txt[ipos-1]='0') and (n=1) then 
112    Result:=result+'' //如果少于1块时,不要显示元。 
113else 
114    Result:='元'+result; 
115for i:=n downto 1 do 
116begin 
117case n-i of 
1180,4,8,12: strlevel[i]:=''; 
1191,5,9,13: strlevel[i]:='拾'; 
1202,6,10,14: strlevel[i]:='佰'; 
1213,7,11,15: strlevel[i]:='仟'; 
122end; //case 
123if (txt[i]='0')  then strlevel[i]:=''; 
124//要处理零 以及加上万、亿 
125if n-i=4 then 
126begin 
127if  strarray[i]='零' then   strarray[i]:=''; 
128      Result:=strarray[i]+strlevel[i]+'万'+result 
129end 
130else if n-i=8 then 
131begin 
132if  strarray[i]='零' then   strarray[i]:=''; 
133      Result:=strarray[i]+strlevel[i]+'亿'+result 
134end //begin 
135else if n-i=12 then 
136begin 
137if  strarray[i]='零' then   strarray[i]:=''; 
138      Result:=strarray[i]+strlevel[i]+'兆'+result 
139end //begin 
140else 
141    Result:=strarray[i]+strlevel[i]+result; 
142end; //for 
143end;
文章来源:IT工程信息网  http://www.systhinker.com/html/09/n-12309.html

Delphi货币类型转中文大写金额 在Delphi中,为了实现货币数值运算中的严格精度要求,内部把货币类型数据当作一个放大10000倍的64位整数来处理。这样根据64位整数的范围,可以得出货币类型Currency的范围是 [-922337203685477.5807; 922337203685477.5807]。 货币类型一个最常见的应用场景是金额大写转换,网上都是一些先将货币转字符串后再对字符串处理的代码,而且有些方法在有些情况 阅读详情

相关推荐

Delphi实现数字与汉字的转换

用Delphi实现数字与汉字的转换源码

Delphi 12种大小写转换的方法

第一种方法有多种方法,放在下面,大家可以依次去看。好久没写笔记了。呵呵。function TPrintfrm.NumToChar(n: Real): wideString; //可以到万亿,并可随便扩大constcNum: WideString = '零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分';      cCha: array[0..1, 0..11] of string =      (('零仟','零佰','零拾','零零零','零零',         '零亿','零万','零元','亿

zyyjc的专栏 4790

Delphi 人民币大写转换及朗读工具(源代码)

Delphi 人民币大写转换及朗读工具(源代码,供大家学习)

Delphi版金额大写(人民币大写读数)代码

 uses         math; const  mnUnit:WideString =分角元; const  OtherWords:WideString=整负; const  hzUnit:WideString = 拾佰仟万拾佰仟亿; const  hzNum:WideString=零壹贰叁肆伍陆柒捌玖; function Money2Ch

xwchen的专栏 3539

金额转换器(数字转换为大写)

Delphi的金额转换器啊Delphi的金额转换器啊Delphi的金额转换器啊

套打发票人民币前符号

在套打发票时,总会遇到人民币大写前的特殊叉号加圈的符号。有的不好找,现在我与大家共享我找到的符号

delphi 金额大小写转换函数

{*------------------------------------------------ 金额大小写转换函数 @author 王云盼 @version V1506.01 在delphi7测试OK -------------------------------------------------} unit UnTranRMB; //主要是考虑数字...

weixin_30319097的博客 276

CSP-J第一道模拟题——贪心的小朋友

第一行是一个整数 n,表示糖果的堆数 第二行是由空格分隔的 n 个正整数,即数组 candies,表示每堆糖果的数量。后一个离场的小朋友所拿的糖果总堆数必须小于前一个小朋友(对第一个小朋友没有限制)后一个离场的小朋友所拿的糖果总量必须小于前一个小朋友(对第一个小朋友没有限制)这道题目很简单,但是必须删去无用的部分,看清题目,才能得分哦!输出一行共一个整数,表示最多可能有多少个小朋友吃上了美味的糖果。输出最多可能有多少个小朋友吃上了美味的糖果。离场之后的小朋友才能吃上美味的糖果。每个小朋友可以拿多堆糖果。

weixin_29959235的博客 639

人民币转大写

function changeRmb(const strRmb:string):string;var txt,strhighlevel:string; i,n,m,ilen,ipos:Integer; //n记录整数部分长度,m记录分数部分长度 strarray,strlevel:array of string; p:pchar; ...

weixin_34327223的博客 173

从选型到阵列:基于ESP32-S3的智能硬件麦克风系统设计实战

本文详细介绍了基于ESP32-S3芯片设计智能硬件麦克风阵列的完整实战方案。从核心芯片选型、数字MEMS麦克风的参数解读与电路设计,到关键的声学结构密封、阵列布局策略,再到利用ESP-ADF框架构建音频处理流水线并集成回声消除、噪声抑制等算法,提供了从硬件到软件的全链路设计指南与避坑要点,旨在实现清晰、稳定的远场语音交互。

weixin_29173777的博客 266

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

[转]Delphi 12种大小写转换的方法

----------第一种方法---------- function TPrintfrm.NumToChar(n: Real): wideString; //可以到万亿,并可随便扩大constcNum: WideString = '零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分'; cCha: array[0..1, 0..11] of string = (('零仟',...

weixin_30832983的博客 231

ubuntu系统禁止/开启内核自动更新

内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用,所以需要禁止自动更新内核。本文介绍ubuntu系统禁止/开启内核更新的方法。

m0_50105717的博客 5289

人民币、数字大小写转换

人民币数字转大写,人民币大写转小写,大写数字转小写, 小写数字转大写 (纯粹自己看自己用)

z_wenqian的专栏 1732

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了LCC补偿网络的恒流输出、软开关实现和抗偏移能力等优势,并对比了不同补偿拓扑特性。随后分步骤讲解了Simulink建模流程,包括LCC主电路构建、关键参数设计、双闭环控制系统实现等核心环节。重点阐述了移相控制策略和软开关验证方法,提供了系统效率计算和抗偏移测试的调试技巧。最后展示了仿真结果,在耦合系数变化20%时,闭环系统仍能保持输出电压稳定在±2%波动范围内。文章还探讨了工程扩展方向,并针对常见问题给出了解决方案,为无

xiaoheshang_123的博客 539

Flatten 层的深度理解与运用

Flatten 层的深度理解与运用

你要拥有一个你喜欢并且热爱的人生 7030

昨天面试的一道编程题 将人民币大写转换成数字,并且保证数据不能超过一亿

昨天面试的一道题,当时我是把答案写在纸上,也没有用IDE调今天再写一遍,测试通过,这样也证明了我的思路是正确的。下面这段代码还可以写得更优美点,比如用静态方法等。 /** * 将人民币大写转换成数字,并且保证数据不能超过一亿 * @author joeho * */public class RMBFormatOutPut { /**  * 测试输入  * @param args  */ p

joeho的专栏 984

A133在Android13上适配百兆以太网

NOTE] 【技术支持问题】问题背景/平台。

mangofu的博客 412
上一篇: 数字转换大写人民币的delphi实现
下一篇: 数字转换大写人民币的delphi实现
SysThink
博客等级 码龄17年 37粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值