我想在文本框里面输入数字,然后离开焦点后自动变成像金额那样每3位加一个逗号,并且判断有没有小数点,有的话就判断够不够2位,不够2位就补零,没有小数就补上小数点并加2个零,找了好多网站都没有解决方法,请各位帮一下忙!谢谢!
例:
输入:123456789
结果:123,456,789.00
输入:1234567.9
结果:1,234,567.90还有,我想实现窗口打印功能,但我只需要打印指定的几个文本框的内容,其它都不打印,请问有什么方法可以控制啊?或者用什么控件可以实现?其实就是一个支票打印的东西,要求可以输入后直接在支票上把金额什么的打印出来,麻烦各位帮帮忙了!再次谢谢~~~

解决方案 »

  1.   

    楼上那位朋友,谢谢你的解决方法,既简单又好用,能再帮我解决一下下来发生的问题吗?
    我有个转换人民币大写的方法,可是用了你上面的解决方法后它不承认那个逗号了能有什么办法吗?或者说直接在转换的时候用代码把那个逗号截掉再转换,行吗?我新手不太懂下面附上方法源码//-----------------------------------------
    // 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. 
      

  2.   

    我现在又需要把逗号从文本去掉,怎么去掉啊?打印那个我是想打印窗口内的文本框里的内容,用fastreport好像不好用的~还有其它方法吗?
    非常谢谢楼上那位朋友~