如:
源数据:110
算法1:to 一百一十
算法2:to 壹佰壹拾
反之亦然。
谢谢。
源数据:110
算法1:to 一百一十
算法2:to 壹佰壹拾
反之亦然。
谢谢。
解决方案 »
- delphi中如何插入jpg图片
- 为什么下面的程序调试不能通过?(错误提示:该特定字段‘县名次’可以参考SQL语句中FROM子句列表中的多个表)
- MSCOMM转换问题(300分)
- 100分求教,vcl线程安全问题
- 控件-动态??
- 请教各位,Delphi中如何用OLE调用Surfer的绘制等高线功能??
- 如何对ListView的指定行列内容进行修改?
- 高分请教高手!简单,看了你也是高手
- 要怎么样才能使query1查出来的结果能修改呢?
- 请问在delphi中如何调用MultiByteToWideChar等支持Unicode的涵数,希望可以举个例子:),还有请教如果在delphi中转换GB,Big5字符串,也希望有例子,谢谢:)!
- 请教高手,怎样将mainmenu主菜单项与coolbar中的toolbar中的button相结合
- 哪有好的DELPHI的书
var SmallMonth,BigMonth:string;
wei1,qianwei1:widestring;
//string[2]; //由于该位为汉字故需要用 双字节存储
qianwei,dianweizhi,qian:integer;
begin
{------- 修改参数令值更精确 -------}
{小数点后的位数,需要的话也可以改动该值}
qianwei:=-2 ;{转换成货币形式,需要的话小数点后加多几个零}
Smallmonth:=formatfloat('0.00',small); //如果小数位大于三则四舍五入
{---------------------------------}dianweizhi :=pos('.',Smallmonth);{小数点的位置}{循环小写货币的每一位,从小写的右边位置到左边}
for qian:=length(Smallmonth) downto 1 do
begin
{如果读到的不是小数点就继续}
if qian<>dianweizhi then
begin{位置上的数转换成大写}
case strtoint(copy(Smallmonth,qian,1)) of1:wei1:='壹'; 2:wei1:='贰';
3:wei1:='叁'; 4:wei1:='肆';
5:wei1:='伍'; 6:wei1:='陆';
7:wei1:='柒'; 8:wei1:='捌';
9:wei1:='玖';
0:
begin
wei1:='零';
//wei1:='';
//qian:=qian-1;
//inc(qianwei);
end;
end;{判断大写位置,可以继续增大到real类型的最大值,可是谁有那么多钱}
case qianwei of-5:qianwei1:='微';
-4:qianwei1:='毫';
-3:qianwei1:='厘';
-2:qianwei1:='分';
-1:qianwei1:='角';
0 :qianwei1:='元';
1 :qianwei1:='拾';
2 :qianwei1:='佰';
3 :qianwei1:='千';
4 :qianwei1:='万';
5 :qianwei1:='拾';
6 :qianwei1:='佰';
7 :qianwei1:='千';
8 :qianwei1:='亿';
9 :qianwei1:='拾';
10:qianwei1:='佰';
11:qianwei1:='千'; {
-5:if (wei1<>'') then qianwei1:='微';
-4:if (wei1<>'') then qianwei1:='毫';
-3:if (wei1<>'') then qianwei1:='厘';
-2:if (wei1<>'') then qianwei1:='分';
-1:if (wei1<>'') then qianwei1:='角';
0 :if (wei1<>'') then qianwei1:='元';
1 :if (wei1<>'') then qianwei1:='拾';
2 :if (wei1<>'') then qianwei1:='佰';
3 :if (wei1<>'') then qianwei1:='千';
4 : qianwei1:='万';
5 :if (wei1<>'') then qianwei1:='拾';
6 :if (wei1<>'') then qianwei1:='佰';
7 :if (wei1<>'') then qianwei1:='千';
8 : qianwei1:='亿';
9 :if (wei1<>'') then qianwei1:='拾';
10:if (wei1<>'') then qianwei1:='佰';
11:qianwei1:='千'; }
end;
inc(qianwei); //自加
BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}end;
//qian:=qian-1;
end;SmallTOBig:=BigMonth;end;
(* CNum2Num 将中文数字字串转成阿拉伯数字
(* 使用示例:
(* if CNum2Num('一千三百万零四十点一零三', dblTest)
(* dblTest ==> 13000040.103
(*
(* 注意事项:
(* 1. 转换成功, 函数传回 True; 否则为 False
(* 2. 不支援 '四万万' 等的说法, 必须为标准的记数方式
(*
(* Author: Wolfgang Chien
(* Date: 1996/08/04
(* Update Date:
(* -------------------------------------------------- *)
function CNum2Num(sChineseNum: string; var dblArabic: double): boolean;
const
_ChineseNumeric = '十百千万亿兆点零一二三四五六七八九';
{_ChineseNumeric = '1十3百5千7万9亿11兆13点15零17一19二21三四五六七八九';}
var
i: integer;
iPos: integer;
dblBuffer: double;
sMultiChar: string;
iDigit: integer;
iRightOfDecimal: integer;
bMinus: boolean; (* 简单的十次方函数, 取 10^n, where n: byte and n >= 0 *)
function EasyPower10(iPower: byte): double;
var
i: integer;
begin
Result := 1;
try
for i := 1 to iPower do Result := Result * 10;
except
Result := 0;
end;
end;
begin
Result := False;
dblArabic := 0;
dblBuffer := 0;
iDigit := -1;
iRightOfDecimal := -1; if Copy(sChineseNum, 1, 2) = '负' then
begin
sChineseNum := Copy(sChineseNum, 3, 254);
bMinus := True;
end
else
bMinus := False; i := 1;
while i < Length(sChineseNum) do
begin
(* 如果不是中文字 ==> Fail *)
if sChineseNum[i] < #127 then Exit;
sMultiChar := Copy(sChineseNum, i, 2);
iPos := Pos(sMultiChar, _ChineseNumeric);
if iPos = 0 then Exit;
if (iDigit = -1) and (iPos > 13) then
iDigit := (iPos - 15) div 2;
case iPos of
1, 3, 5:
begin
(* 十百千 *)
if iDigit = -1 then iDigit := 1;
dblBuffer := dblBuffer + iDigit * EasyPower10((iPos + 1) div 2);
iDigit := -1;
end;
7, 9, 11:
begin
(* 万亿兆 *)
if (iDigit > 0) and (iDigit < 10) then
dblBuffer := dblBuffer + iDigit;
dblArabic := dblArabic + dblBuffer * EasyPower10((iPos-5) div 2 * 4);
iDigit := -1;
dblBuffer := 0;
end;
13:
begin
(* 小数点 *)
if (iDigit > 0) and (iDigit < 10) then
dblBuffer := dblBuffer + iDigit;
dblArabic := dblArabic + dblBuffer;
dblBuffer := 0;
iDigit := -1;
iRightOfDecimal := 0;
end;
15: (* 零 *)
begin
if iRightOfDecimal > -1 then Inc(iRightOfDecimal);
iDigit := -1;
end;
else
begin
if iRightOfDecimal > -1 then
begin
(* 小数点右边的部分 *)
Inc(iRightOfDecimal);
try
dblArabic := dblArabic + iDigit / EasyPower10(iRightOfDecimal);
except
Exit;
end;
iDigit := -1;
end;
end;
end; {$ifdef __Debug}
ShowMessage(IntToStr(i) + 'th dblArabic: ' + FloatToStr(dblArabic));
ShowMessage(IntToStr(i) + 'th dblBuffer: ' + FloatToStr(dblBuffer));
ShowMessage(IntToStr(i) + 'th iDigit: ' + IntToStr(iDigit));
{$endif} Inc(i, 2);
end; if (iDigit > 0) and (iDigit < 10) then
dblBuffer := dblBuffer + iDigit;
if dblBuffer <> 0 then dblArabic := dblArabic + dblBuffer;
if bMinus then
begin
{$ifdef __SafeMode}
sChineseNum := '负' + sChineseNum;
{$endif}
dblArabic := dblArabic * -1;
end;
{$ifdef __SafeMode}
Result := sChineseNum = Num2CNum(dblArabic);
{$else}
Result := True;
{$endif}
end;end.
function Tform1.SmallTOBig(small:real):string;
var SmallMonth,BigMonth:string;
wei1,qianwei1:widestring;
//string[2]; //由于该位为汉字故需要用 双字节存储
qianwei,dianweizhi,qian:integer;
begin
{------- 修改参数令值更精确 -------}
{小数点后的位数,需要的话也可以改动该值}
qianwei:=-2 ;{转换成货币形式,需要的话小数点后加多几个零}
Smallmonth:=formatfloat('0.00',small); //如果小数位大于三则四舍五入
{---------------------------------}dianweizhi :=pos('.',Smallmonth);{小数点的位置}{循环小写货币的每一位,从小写的右边位置到左边}
for qian:=length(Smallmonth) downto 1 do
begin
{如果读到的不是小数点就继续}
if qian<>dianweizhi then
begin{位置上的数转换成大写}
case strtoint(copy(Smallmonth,qian,1)) of1:wei1:='壹'; 2:wei1:='贰';
3:wei1:='叁'; 4:wei1:='肆';
5:wei1:='伍'; 6:wei1:='陆';
7:wei1:='柒'; 8:wei1:='捌';
9:wei1:='玖';
0:
begin
wei1:='零';
//wei1:='';
//qian:=qian-1;
//inc(qianwei);
end;
end;{判断大写位置,可以继续增大到real类型的最大值,可是谁有那么多钱}
case qianwei of-5:qianwei1:='微';
-4:qianwei1:='毫';
-3:qianwei1:='厘';
-2:qianwei1:='分';
-1:qianwei1:='角';
0 :qianwei1:='元';
1 :qianwei1:='拾';
2 :qianwei1:='佰';
3 :qianwei1:='千';
4 :qianwei1:='万';
5 :qianwei1:='拾';
6 :qianwei1:='佰';
7 :qianwei1:='千';
8 :qianwei1:='亿';
9 :qianwei1:='拾';
10:qianwei1:='佰';
11:qianwei1:='千'; {
-5:if (wei1<>'') then qianwei1:='微';
-4:if (wei1<>'') then qianwei1:='毫';
-3:if (wei1<>'') then qianwei1:='厘';
-2:if (wei1<>'') then qianwei1:='分';
-1:if (wei1<>'') then qianwei1:='角';
0 :if (wei1<>'') then qianwei1:='元';
1 :if (wei1<>'') then qianwei1:='拾';
2 :if (wei1<>'') then qianwei1:='佰';
3 :if (wei1<>'') then qianwei1:='千';
4 : qianwei1:='万';
5 :if (wei1<>'') then qianwei1:='拾';
6 :if (wei1<>'') then qianwei1:='佰';
7 :if (wei1<>'') then qianwei1:='千';
8 : qianwei1:='亿';
9 :if (wei1<>'') then qianwei1:='拾';
10:if (wei1<>'') then qianwei1:='佰';
11:qianwei1:='千'; }
end;
inc(qianwei); //自加
BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}end;
//qian:=qian-1;
end;SmallTOBig:=BigMonth;end;//中文数字和阿拉伯数字互换的函数二
unit cutils;interfaceuses
SysUtils;function CNum2Num(sChineseNum: string; var dblArabic: double): boolean;
function Num2CNum(dblArabic: double): string;implementation(* -------------------------------------------------- *)
(* Num2CNum 将阿拉伯数字转成中文数字字串
(* 使用示例:
(* Num2CNum(10002.34) ==> 一万零二点三四
(*
(* Author: Wolfgang Chien
(* Date: 1996/08/04
(* Update Date:
(* -------------------------------------------------- *)
function Num2CNum(dblArabic: double): string;
const
_ChineseNumeric = '零一二三四五六七八九';
var
sArabic: string;
sIntArabic: string;
iPosOfDecimalPoint: integer;
i: integer;
iDigit: integer;
iSection: integer;
sSectionArabic: string;
sSection: string;
bInZero: boolean;
bMinus: boolean; (* 将字串反向, 例如: 传入 '1234', 传回 '4321' *)
function ConvertStr(const sBeConvert: string): string;
var
x: integer;
begin
Result := '';
for x := Length(sBeConvert) downto 1 do
AppendStr(Result, sBeConvert[x]);
end; { of ConvertStr }
begin
Result := '';
bInZero := True;
sArabic := FloatToStr(dblArabic); (* 将数字转成阿拉伯数字字串 *)
{$ifdef __Debug}
ShowMessage('FloatToStr(dblArabic): ' + sArabic);
{$endif}
if sArabic[1] = '-' then
begin
bMinus := True;
sArabic := Copy(sArabic, 2, 254);
end
else
bMinus := False;
iPosOfDecimalPoint := Pos('.', sArabic); (* 取得小数点的位置 *)
{$ifdef __Debug}
ShowMessage('Pos(''.'', sArabic) ' + IntToStr(iPosOfDecimalPoint));
{$endif} (* 先处理整数的部分 *)
if iPosOfDecimalPoint = 0 then
sIntArabic := ConvertStr(sArabic)
else
sIntArabic := ConvertStr(Copy(sArabic, 1, iPosOfDecimalPoint - 1));
(* 从个位数起以每四位数为一小节 *)
for iSection := 0 to ((Length(sIntArabic) - 1) div 4) do
begin
sSectionArabic := Copy(sIntArabic, iSection * 4 + 1, 4);
sSection := '';
(* 以下的 i 控制: 个十百千位四个位数 *)
for i := 1 to Length(sSectionArabic) do
begin
iDigit := Ord(sSectionArabic[i]) - 48;
if iDigit = 0 then
begin
(* 1. 避免 '零' 的重覆出现 *)
(* 2. 个位数的 0 不必转成 '零' *)
if (not bInZero) and (i <> 1) then sSection := '零' + sSection;
bInZero := True;
end
else
begin
case i of
2: sSection := '十' + sSection;
3: sSection := '百' + sSection;
4: sSection := '千' + sSection;
end;
sSection := Copy(_ChineseNumeric, 2 * iDigit + 1, 2) +
sSection;
bInZero := False;
end;
end; (* 加上该小节的位数 *)
if Length(sSection) = 0 then
begin
if (Length(Result) > 0) and (Copy(Result, 1, 2) <> '零') then
Result := '零' + Result;
end
else
begin
case iSection of
0: Result := sSection;
1: Result := sSection + '万' + Result;
2: Result := sSection + '亿' + Result;
3: Result := sSection + '兆' + Result;
end;
end;
{$ifdef __Debug}
ShowMessage('sSection: ' + sSection);
ShowMessage('Result: ' + Result);
{$endif}
end; (* 处理小数点右边的部分 *)
if iPosOfDecimalPoint > 0 then
begin
AppendStr(Result, '点');
for i := iPosOfDecimalPoint + 1 to Length(sArabic) do
begin
iDigit := Ord(sArabic[i]) - 48;
AppendStr(Result, Copy(_ChineseNumeric, 2 * iDigit + 1, 2));
end;
end; {$ifdef __Debug}
ShowMessage('Result before 其他例外处理: ' + Result);
{$endif}
(* 其他例外状况的处理 *)
if Length(Result) = 0 then Result := '零';
if Copy(Result, 1, 4) = '一十' then Result := Copy(Result, 3, 254);
if Copy(Result, 1, 2) = '点' then Result := '零' + Result; (* 是否为负数 *)
if bMinus then Result := '负' + Result;
{$ifdef __Debug}
ShowMessage('Result before Exit: ' + Result);
{$endif}
end;
var SmallMoney,BigMoney:string;
wei1,qianwei1:string[2];
wei,qianwei,dianweizhi,qian:integer;
ContinueZeroFlag:Boolean;
begin
ContinueZeroFlag:=True;
{------- 修改参数令值更精确 -------}
{小数点后的位置,需要的话也可以改动-2值}
qianwei:=-2;
{转换成货币形式,需要的话小数点后加多几个零}
Smallmoney:=formatFloat('0.00',small);
{---------------------------------}
dianweizhi :=pos('.',Smallmoney);{小数点的位置}
{循环小写货币的每一位,从小写的右边位置到左边}
for qian:=length(Smallmoney) downto 1 do
if qian<>dianweizhi then {如果读到的不是小数点就继续}
begin
{位置上的数转换成大写}
case strtoint(copy(Smallmoney,qian,1)) of
1:wei1:='壹';
2:wei1:='贰';
3:wei1:='叁';
4:wei1:='肆';
5:wei1:='伍';
6:wei1:='陆';
7:wei1:='柒';
8:wei1:='捌';
9:wei1:='玖';
0:wei1:='零';
end;
{判断大写位置,可以继续增大到real类型的最大值}
case qianwei of
-3:qianwei1:='厘';
-2:qianwei1:='分';
-1:qianwei1:='角';
0 :qianwei1:='元';
1 :qianwei1:='拾';
2 :qianwei1:='佰';
3 :qianwei1:='仟';
4 :qianwei1:='万';
5 :qianwei1:='拾';
6 :qianwei1:='佰';
7 :qianwei1:='仟';
8 :qianwei1:='亿';
9 :qianwei1:='拾';
10:qianwei1:='佰';
11:qianwei1:='仟';
end; if wei1<>'零' then
begin
BigMoney :=wei1+qianwei1+BigMoney;{组合成大写金额}
ContinueZeroFlag:=False;
end
else begin
if qianwei=-2 then
BigMoney:=BigMoney+'整' ;
if qianwei=0 then
if Small>1 then
BigMoney :='元'+BigMoney
else
BigMoney :='零元'+BigMoney ;
if qianwei=4 then
BigMoney :='万'+BigMoney;
if qianwei=8 then
BigMoney :='亿'+BigMoney; if not ContinueZeroFlag then
BigMoney :='零'+BigMoney ;
ContinueZeroFlag:=True;
end;
inc(qianwei);
end;
SmallTOBig:=BigMoney;
end;
壹佰贰拾叁点壹贰叁 ->123.123 是哪个?
CNum2Num和Num2CNum是完成 123.123与一百二十三点一二三的互换
马上给分,决不失言!