{*------------------------------------------------
金额大小写转换函数
@author 王云盼
@version V1506.01
 在delphi7测试OK
-------------------------------------------------}
unit UnTranRMB; //主要是考虑数字的小数部分,和大写金额的零 interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; function TranRMB(const Value: string): string; /// const 和 var 常量 变量 数字金额转换成大写金额
function TranNum(M: string):string; /// 大写金额转换成数字金额 implementation {*------------------------------------------------
判断是否有小数点, 切给出小数点出现的位置 和小数点的数目
@param S 字符串
@param Pos 小数点位置
@param Number 小数点个数
@return Boolean
-------------------------------------------------}
function IsPoint(S: string; var Pos: Integer; var Number: integer): Boolean;
var
I: integer;
begin
Result := False;
Number := 0;
for I := 1 to length(S) do
begin
if S[I] = '.' then
begin
Pos := I;
Number := Number + 1;
Result := True;
end;
end;
end; {*------------------------------------------------
检测字符串是否合理,若小数点超过1个或者字符串开头是0
@param Value
@return Boolean
-------------------------------------------------}
function ChickStr(Value: double): Boolean;
var
J, K : Integer;
begin
Result := False;
if Value <= 0 then
Result := True;
if IsPoint(floatToStr(Value), J, K) = True then
if K >= 2 then
Result := True;
end; {*------------------------------------------------
转换小写函数
@param
@return
-------------------------------------------------}
function TranNum(M: string):string;
var
N: Integer;
S: string;
begin
S := '.00';
if Length(M) = 1 then
Result := '¥' + M + S
else Result := '¥' + M ;
end; {*------------------------------------------------
数字金额转换成大写金额
@param
@return
-------------------------------------------------}
function TranRMB(const Value: string): string;
var
I, J, K, L, V, Pos, LZPart, LXPart : integer;
S1: string;
IsZero: Boolean;
begin
if ((Value[1]='0') and (Value[2]<>'.')) or (Value[1]='.') then /// 第一位不能为小数点
begin
ShowMessage('不符合要求');
exit;
end;
//if ChickStr(FloatToStr(S1)) = True then exit; /// 判断是否可以转换
L := length(Value); /// 初始化转换的数字长度
Result := '人民币'; /// 初始化返回值 /// 有小数情况
if IsPoint(Value, Pos, J) = True then
begin
LXPart := L - Pos; /// 小数部分长度
LZPart := L - LXPart - 1; /// 整数部分长度
if StrToFloat(Value) = 0 then
begin
Result :=Result + '零元整';
exit;
end;
for J := 1 to LZPart do /// 当前位置
begin
K := StrToInt(Value[J]); /// 当前位置的内容
V := LZPart - J + 1; /// 当前位置的权
case K of /// 获取当前位置内容的大写值
1: S1 := '壹';
2: S1 := '贰';
3: S1 := '叁';
4: S1 := '肆';
5: S1 := '伍';
6: S1 := '陆';
7: S1 := '柒';
8: S1 := '捌';
9: S1 := '玖';
0: begin /// 有0的情况
S1 := '零';
if J < LZPart then /// 如果不是最后一位,则判断低位是否也有0,有0不显示
begin
if (Value[J+1] = '') or (Value[J+1] = '0') then
S1 := '';
end;
if J = LZPart then /// 0在最后一位也不显示
S1 := '';
end;
end;
case V of /// 权的情况
1:begin
if K = 0 then
begin
if StrToFloat(Value) < 1 then
begin
S1 := '';
Result := Result + S1;
end
else begin
S1 := '';
Result := Result + S1 + '元' ;
end;
end
else
Result := Result + S1 + '元';
end;
2:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '拾';
end;
3:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '百' ;
end;
4:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '仟' ;
end;
5:begin
if K = 0 then
begin
S1 := '';
Result := Result + S1 + '万' ;
end
else
Result := Result + S1 + '万';
end;
6:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '拾';
end;
7:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '百';
end;
8:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '仟';
end;
9:begin
if K = 0 then
begin
S1 := '';
Result := Result + S1 + '万' ;
end
else
Result := Result + S1 + '亿';
end;
10:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '拾';
end;
11:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '百';
end;
12:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '仟';
end;
13:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '万';
end;
14:begin
if K = 0 then
Result := Result + S1
else
Result := Result + S1 + '兆';
end;
end;
end;
for I := 1 to LXPart do
begin
V := StrToInt(Value[I+Pos]) ;
case V of
1: S1 := '壹';
2: S1 := '贰';
3: S1 := '叁';
4: S1 := '肆';
5: S1 := '伍';
6: S1 := '陆';
7: S1 := '柒';
8: S1 := '捌';
9: S1 := '玖';
0: begin
S1 := '零';
if I < L then /// 如果不是最后一位
begin
if (Value[I+Pos+1] = '') or (Value[I+Pos+1] = '0') then
begin
IsZero := True;
S1 := '';
end;
end;
if I = L then
S1 := '';
end;
end; case I of
1: begin
if V = 0 then
begin
Result := Result + S1 ;
end
else
Result := Result + S1 + '角';
end;
2: begin
if V = 0 then
begin
Result := Result + S1 ;
end
else
Result := Result + S1 + '分';
end;
3: begin
if V = 0 then
begin
Result := Result + S1 ;
end
else
Result := Result + S1 + '厘';
end;
4: begin
if V = 0 then
begin
Result := Result + S1 ;
end
else
Result := Result + S1 + '毫';
end;
end;
end;
if S1 = '' then Result := Result + '整';
end /// 不是小数情况
else begin
for I := 1 to L do /// 当前位的位置
begin
V := StrToInt(Value[I]) ; /// 当前位的内容
K := L - I + 1; /// 当前位的权
case V of
1: S1 := '壹';
2: S1 := '贰';
3: S1 := '叁';
4: S1 := '肆';
5: S1 := '伍';
6: S1 := '陆';
7: S1 := '柒';
8: S1 := '捌';
9: S1 := '玖';
0: begin
S1 := '零';
if I < L then /// 如果不是最后一位
begin /// 判断下一位是不是0,低位0不显示
if (Value[i+1] = '') or (Value[i+1] = '0') then
S1 := '';
end;
if I = L then
S1 := '';
end;
end; case K of
1:begin
if V = 0 then /// 当有零的情况
Result := Result + S1 + '元整'
else
Result := Result + S1 + '元整';
end;
2:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '拾';
end;
3:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '百' ;
end;
4:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '仟' ;
end;
5:begin
if V = 0 then
begin
S1 := '';
Result := Result + S1 + '万' ;
end
else
Result := Result + S1 + '万';
end;
6:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '拾';
end;
7:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '百';
end;
8:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '仟';
end;
9:begin
if V = 0 then
begin
S1 := '';
Result := Result + S1 + '亿' ;
end
else
Result := Result + S1 + '亿';
end;
10:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '拾';
end;
11:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '百';
end;
12:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '仟';
end;
13:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '万';
end;
14:begin
if V = 0 then
Result := Result + S1
else
Result := Result + S1 + '兆';
end;
end;
end;
end;
end; end.

delphi 金额大小写转换函数的更多相关文章

  1. Oracle 大小写转换函数

    Oracle 大小写转换函数 转大写UPPER 转小写LOWER 测试: select UPPER('Test') as u from dual; select LOWER('Test') as l ...

  2. 【Python-2.7】大小写转换函数

    字母大小写是编程过程中经常遇到的问题,如下函数可以灵活的进行大小写转换: title():把单词首字母转换为大写: upper():把每个字母转换为大写: lower():把每个字母转换为小写. 示例 ...

  3. .NET下金额大小写转换

    说明:金额转换可以转换50位的数值,单位从分到级.对于中间部分是否显示零,可以根据修改TranslateJInen()函数修改.中间数值为零的去掉不显示 public string GetChCapi ...

  4. double四舍五入,商品金额大小写转换,设置货币的小数位数跟格式输出,进制转化

      1:计算double值四舍五入的方法 对小数数值进行四舍五入,首先应该确认保留小数位, 如果数值的小数精度大于保留小数位,那么开始四舍五入计算.四舍五入的方法非常简单,在所有要丢失精度的小数位中加 ...

  5. python大小写转换函数

    1.全部转换成大写:upper() 用法: str = 'marsggbo'     print str.upper() 结果:MARSGGBO 2.全部转换成小写:lower() 用法:str = ...

  6. php大小写转换函数

    1.将字符串转换成小写   strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字 符串.例: <?php $str = "I want T ...

  7. strtolower() strtoupper()等字符串大小写转换函数

    $str = "Mary Had A Little Lamb and She LOVED It So"; string strtolower ( string $str )— 将字 ...

  8. php中常用的字符串大小写转换函数实例解释

    PHP字符串处理函数中,最为简单的几个函数,相关解释就不上了,直接看例子. PHP字符串处理函数中,最为简单的几个函数,相关解释就不上了,直接看例子. strtolower函数.strtoupper函 ...

  9. jQuery字母大小写转换函数

    toLowerCase() ------ 将字符串中的所有字符都转换成小写: toUpperCase() ------ 将字符串中的所有字符都转换成大写:

随机推荐

  1. springboot mybatisPlus配置

    1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. emqtt 3 (我要subscribe 这个topic)

    这一次,主要分析client subscribe 某个topic 的处理流程. 由protocol开始 是的,还是要从protocol开始,至于为什么,之前就说过了. subscribe 类型的pac ...

  3. 使用CMake生成sln项目和VS工程遇到的问题

    用vs运行cmake后的工程 参考:http://zhidao.baidu.com/link?url=AZRxI0jGDzo6Pikk68qylee0g7leXbpbZGiVuyiijWbd8scUK ...

  4. 分布式缓存系统 Memcached 半同步/半异步模式

    在前面工作线程初始化的分析中讲到Memcached采用典型的Master_Worker模式,也即半同步/半异步的高效网络并发模式.其中主线程(异步线程)负责接收客户端连接,然后分发给工作线程,具体由工 ...

  5. phpmailer绑定邮箱

    1.配置 <?php return array ( 'email_host' => 'smtp.aliyun.com', 'email_port' => '25', 'email_u ...

  6. thinkphp中的volist标签

    属性: name(必须):要输出的数据模板变量 id(必须):循环变量 offset(可选):要输出数据的offset length(可选):输出数据的长度 key(可选):循环的key变量,默认值为 ...

  7. html5移动开发的几大特性

    html5移动开发的出现让移动平台的竞争由系统平台转向了浏览器之间:移动端的IE.Chrome.FireFox.Safari,亦或是新出现的浏览器,谁能达到在移动端对HTML5更好的支持,谁就能在以后 ...

  8. SqlServer——临时表

    1.表的类型: SqlServer数据库中分为两个表:永久表.临时表:通过表名的前缀区分. 永久表:与物理文件.C# 中的静态类 类似,任何用户均可对其执行操作并且相互影响: 临时表:简单的说就是使用 ...

  9. Java微信公众平台开发(十)--微信自定义菜单的创建实现

    转自:http://www.cuiyongzhi.com/post/48.html 自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自 ...

  10. MySQL备份还原之一mydumper

    1)源码编译安装 1.下载 mydumper源码 2.解压 [mysql@localhost ~]$ tar -xvf mydumper-0.9.1.tar mydumper-0.9.1/CMakeL ...