数字转换大写人民币的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的金额转换器啊

套打发票人民币前符号

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

人民币转大写

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

Argoverse2数据集保姆级导入教程:从下载到预处理全流程解析

本文详细解析了Argoverse2数据集的完整导入流程,从环境配置、数据下载到预处理和高效加载策略。作为自动驾驶领域的标杆数据集,Argoverse2提供多模态传感器数据和高精地图信息,帮助研究者快速搭建数据处理流水线。文章包含实用代码示例和性能优化技巧,特别适合自动驾驶算法开发者参考。

weixin_29035405的博客 335

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

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

weixin_30832983的博客 231

村田电感模型选型指南:.s2p和SPICE netlist在ADS中的表现差异

本文深度解析了村田电感在ADS仿真中.s2p与SPICE netlist两种模型的表现差异。通过对比模型本质、仿真设置及高低频段精度,揭示了.s2p文件基于实测插值而SPICE netlist基于等效电路外推的特性。文章提供了明确的选型策略,帮助工程师根据项目频段、仿真类型和精度需求,在射频与微波电路设计中做出最优模型选择。

k9l0m1的博客 452

【运筹学】什么是基变量?对于线性规划问题中“基”概念的理解(3月3日学习笔记)

在学习《线性规划与目标规划》的过程中,课程的主讲老师郭韧给出了对于基概念的定义如下图 图片来源:运筹学(中国大学mooc网) 由此我产生了几个疑惑:1.如何理解B是线性规划问题的一个基?2.为什么说最多有CnmC_n^mCnm​个基呢?     1.如何理解B是线性规划问题的一个基?1.如何理解B是线性规划问题的一个基?1.如何理解B是线性规划问题的一个基? 在回答第一个...

纸羊同学的博客 3万+

delphi 金额大小写转换函数

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

weixin_30319097的博客 276

SE80 Repository Information System 在 SAP CRM WebClient UI 组件分析中的实战指南

在 SAP CRM WebClient UI 开发过程中,如何快速定位组件、视图、上下文节点以及各类运行时对象,一直是调试效率的关键。(后文简称RIS)正是隐藏在SE80里的瑞士军刀,帮助开发者按照组件集、数据元素、上下文节点属性等多维条件进行交叉检索。官方博客将它描述为本文结合多年项目经验,系统梳理RIS的功能脉络与实战技巧,同时引入真实案例,示范如何借助它在几分钟内完成以往动辄数小时的排查任务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2万+

人民币、数字大小写转换

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

z_wenqian的专栏 1732

Django 6.0:有哪些新特性以及它们对实际项目的重要性

Django 6.0 感觉像是一个成熟的版本,它基于实际应用案例而打造。它减少了不必要的复杂性,同时扩展了框架的开箱即用功能。升级到 Django 6.0 不仅仅是为了保持版本更新,更是为了构建更易于维护、更安全、更能适应未来发展的应用程序。

iCloudEnd的博客 341

uniapp - 最新实现APP连接使用MQTT流程及源码教程,uniapp app端接入mqtt发布订阅和接收消息队列传送消息、断开重连等各种示例代码(完美兼容安卓Android与苹果ios手机)

uniapp app端接入mqtt示例代码教程,uni-app中使用mqtt,uniapp安卓app接入mqtt,uniApp苹果ios集成MQTT教程,uniapp vue3 mqtt app端的接入流程,uniapp开发安卓和ios如何在项目里集成mqtt,Mqtt协议,uniapp开发APP,主动连接mqtt,订阅消息,实现发布,订阅和接收消息,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,搭建MQTT通讯做聊天项目,uniapp与设备通信 通过mqtt实现

🏆 前端领域优质创作者 6570

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

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

joeho的专栏 984

ORB-SLAM3算法2之EuRoc开源数据集运行ORB-SLAM3生成轨迹并用evo工具评估轨迹

ORB-SLAM3算法1 已成功编译安装ORB-SLAM3到本地,本篇目的是用EuRoc开源数据来运行ORB-SLAM3,并生成轨迹,最后用evo评估工具来评估ORB-SLAM3生成的轨迹和真值轨迹。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 3762
上一篇: 数字转换大写人民币的delphi实现
下一篇: 数字转换大写人民币的delphi实现
SysThink
博客等级 码龄17年 37粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值