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

5G核心技术:N3与N4接口深度解析

5G网络中,N3和N4接口是实现用户数据传输的核心。N3接口是gNB与UPF之间的用户面通道,采用GTP-U协议封装数据,通过UDP/IP传输,确保低时延和业务隔离。N4接口是SMF与UPF之间的控制面链路,基于PFCP协议下发转发规则(FAR/TDR/QER/URR),实现精细化流量控制。二者协同工作:N4下发策略(如QoS、计费规则),N3执行数据转发,共同支持5G三大场景(eMBB/uRLLC/mMTC),体现控制与转发分离(CUPS)架构优势。

Qinti_mm的博客 1634

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

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

weixin_30832983的博客 231

DAIC-WOZ抑郁数据集实战:从申请到特征提取的全流程避坑指南

本文详细解析了DAIC-WOZ抑郁数据集从申请到特征提取的全流程,提供了实用的避坑指南和代码模板。涵盖数据获取技巧、多模态特征工程(面部动作单元、音频特征、文本处理)以及样本不平衡解决方案,帮助研究者高效处理这一经典抑郁分析数据集。

weixin_29196315的博客 171

FreeSWITCH视频通话实战:关键配置文件解析与编解码优化

本文详细解析了FreeSWITCH视频通话实战中的关键配置,重点介绍了如何通过修改`conf/vars.xml`和`sip_profiles/internal.xml`文件来启用媒体代理、优化编解码器设置(如H.264和VP8),并解决常见的视频流协商与网络穿透问题,帮助用户快速实现稳定、高质量的视频通话功能。

js777的博客 252

delphi 金额大小写转换函数

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

weixin_30319097的博客 276

Android手机免root玩转Kali NetHunter:Termux保姆级安装指南(附Kex VNC配置)

本文提供了一份详细的Android手机免root安装Kali NetHunter的保姆级指南。通过使用Termux终端模拟器,用户无需解锁Bootloader或获取root权限,即可在普通安卓设备上部署完整的Kali Linux渗透测试环境。教程涵盖了从环境准备、NetHunter核心安装到配置Kex VNC实现图形桌面访问的全过程,并附带了电脑投屏与常见问题解决方案,旨在打造一个便携的移动安全学习与测试平台。

weixin_29208327的博客 297

人民币、数字大小写转换

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

z_wenqian的专栏 1732

基于STM32设计的指纹考勤机_348

随着信息化管理需求的日益增长,传统的人工考勤方式已难以满足现代社会对高效、精准和安全的考勤管理要求。为解决这一问题,本项目设计并实现了一款基于STM32的指纹考勤机系统。该系统采用AS608指纹识别模块进行人员身份识别,ESP8266无线模块实现与上位机APP的通信,支持人员信息录入、考勤时间段设置、考勤记录保存与查询等功能。系统通过SQLite数据库存储考勤数据,并提供导出EXCEL表格功能,方便数据管理与统计分析。该系统具有高效的考勤管理能力和良好的用户交互体验,能够广泛应用于企业、学校等机构的考勤管理

525

uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程

uniapp中H5微信登录,uniapp H5微信授权登录,微信公众号第三方网页(H5)授权登录(OAuth2.0)流程及逻辑详细教程,UNIAPP 开发H5 怎么实现微信公众号登录功能,uniapp如何实现H5网页的公众号微信登录,怎么做uniapp微信登录,uniapp h5项目怎么实现微信登录的功能,uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录)

🏆 前端领域优质创作者 7409

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

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

joeho的专栏 984

汽车ECU诊断刷写和OTA升级中的验签和校验

汽车ECU诊断刷写和OTA升级中的验签和校验

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值