我想在文本框里面输入数字,然后离开焦点后自动变成像金额那样每3位加一个逗号,并且判断有没有小数点,有的话就判断够不够2位,不够2位就补零,没有小数就补上小数点并加2个零,找了好多网站都没有解决方法,请各位帮一下忙!谢谢!
例:
输入:123456789
结果:123,456,789.00
输入:1234567.9
结果:1,234,567.90还有,我想实现窗口打印功能,但我只需要打印指定的几个文本框的内容,其它都不打印,请问有什么方法可以控制啊?或者用什么控件可以实现?其实就是一个支票打印的东西,要求可以输入后直接在支票上把金额什么的打印出来,麻烦各位帮帮忙了!再次谢谢~~~
例:
输入:123456789
结果:123,456,789.00
输入:1234567.9
结果:1,234,567.90还有,我想实现窗口打印功能,但我只需要打印指定的几个文本框的内容,其它都不打印,请问有什么方法可以控制啊?或者用什么控件可以实现?其实就是一个支票打印的东西,要求可以输入后直接在支票上把金额什么的打印出来,麻烦各位帮帮忙了!再次谢谢~~~
解决方案 »
- 如何通过点击BUTTON按钮来运行一个EXE文件
- 怎么给spcomm控件的Parity属性(奇偶校验)赋值
- 为什么执行 if mythread.suspended 结果错误?
- 图形的放大
- 今天心情不错,再散分.
- 一个菜得不行的问题... 在线等待,急!
- 在线等待有两个表Table1、Table2 我想从Table1表查出记录存到Table2表中
- 您好! 如何使用下载的控件??
- 关于焦点的问题?
- 有谁知道DELPHI中所有函数,及所有的用处等,关于函数方面的知识,或者说有没有这方面的书!!??
- 请问怎样利用Printer对象实现连续打印而不换页,一次性打印完数据库表的所有记录?
- DBGrid的FrozenCols属性怎样设置?
我有个转换人民币大写的方法,可是用了你上面的解决方法后它不承认那个逗号了能有什么办法吗?或者说直接在转换的时候用代码把那个逗号截掉再转换,行吗?我新手不太懂下面附上方法源码//-----------------------------------------
// Num2CNum 将阿拉伯数字转成中文数字字串
//------------------------------------------
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;---没有限制小数点后面位置}
i := iPosOfDecimalPoint + 1;
iDigit := Ord(sArabic[i]) - 48;
if Copy(_ChineseNumeric, 2 * iDigit + 1, 2) <> '零' then
begin
AppendStr(Result, Copy(_ChineseNumeric, 2 * iDigit + 1, 2));
Result := Result+'角';
end
else
begin
AppendStr(Result, Copy(_ChineseNumeric, 2 * iDigit + 1, 2));
end;
i := i+1;
iDigit := Ord(sArabic[i]) - 48;
AppendStr(Result, Copy(_ChineseNumeric, 2 * iDigit + 1, 2));
Result := Result+'分'
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 iposofdecimalpoint = 0 then result := result + '元正';
if iposofdecimalpoint <> 0 then result := result + '正';
(* 是否为负数 *)
if bMinus then Result := '负' + Result;
{$IFDEF __Debug}
ShowMessage('Result before Exit: ' + Result);
{$ENDIF}
end;
下面是英文的:
unit NumberToLetters;interface(* This function returns the written equivalent of a number. *)
function NumToLetters(Number: Real): string;
implementation
uses SysUtils;typeTNumberStr = string[13];const
Numbers: array[1..19] of TNumberStr = ('One','Two','Three', 'Four',
'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve',
'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen',
'Nineteen');Tenths: array[1..9] of TNumberStr = ('Ten', 'Twenty', 'Thirty', 'Forty',
'Fifty', 'Sixty', 'Seventy','Eighty','Ninety');ErrorString = 'not in valid range';Min = 1.00;
Max = 4294967295.99;function NumToLetters(Number: Real): string;
var Dec:String;
function RecurseNumber(N: LongWord;level:Boolean) : string;
begin
case N of
1..19:
Result := Numbers[N];
20..99:
begin
if (N in [20,30,40,50,60,70,80,90]) then Result := Tenths[N div 10]
else Result := Tenths[N div 10] +'-'+ RecurseNumber((N mod 10),True);
end;100..999:
begin
if level=True then
begin
if (N=100)or (N=200)or (N=300) or (N=400) or (N=500)or (N=600)or (N=700) or (N=800) or (N=900) then Result := RecurseNumber((N div 100),True)+' Hundred '
else Result := Numbers[N div 100] + ' Hundred And ' + RecurseNumber((N mod 100),True);
end
else
begin
if (N=100)or (N=200)or (N=300) or (N=400) or (N=500)or (N=600)or (N=700) or (N=800) or (N=900) then Result := RecurseNumber((N div 100),True)+' Hundred '
else Result := Numbers[N div 100] + ' Hundred ' + RecurseNumber((N mod 100),True);
end;
end;1000..999999:
Result := RecurseNumber((N div 1000),False)+ ' Thousand ' +
RecurseNumber((N mod 1000),True);
1000000..999999999: Result := RecurseNumber((N div 1000000),False) + ' Million '
+ RecurseNumber((N mod 1000000),True);
1000000000..4294967295: Result := RecurseNumber((N div 1000000000),False) +
' Billion, ' + RecurseNumber((N mod 1000000000),True);
end; {Case N of}
end; {RecurseNumber}begin
{Calls := 0;}
if (Number >= Min) and (Number <= Max) then
begin
Result := RecurseNumber(Round(Int(Number)),True);
{Added for cents in a currency value}
if not(Frac(Number) = 0.00) then
{write like 'cents Twenty-five',If you want a result like 'Nought Point two five',you can use strings in }
Result :=Result + ' And Cents '+ RecurseNumber(Round(Frac(Number)*100),True)
{Result :=Result +' Point '+ RecurseNumber(Round(Int(Frac(Number)*10)),True)+' '+RecurseNumber(Round(Int(Frac(Number*10)*10)),True)}
else Result := Result +' Only';end;
if (Number >0) and (Number<Min) then
begin
if not(Frac(Number) = 0.00) then
{write like 'cents Twenty-five',If you want a result like 'Nought Point two five',you can use strings in }
Result :=Result + ' Cents '+ RecurseNumber(Round(Frac(Number)*100),True);
{Result :=Result +' Point '+ RecurseNumber(Round(Int(Frac(Number)*10)),True)+' '+RecurseNumber(Round(Int(Frac(Number*10)*10)),True)}
end;
end;{NumToLetters}end.
非常谢谢楼上那位朋友~