Pascal,如何将整数标记为货币值

时间:2018-07-26 07:13:16

标签: delphi integer currency pascal

如何标记成千上万的整数?
只是说我有一个整数12345678910,然后我想将其更改为货币值,例如12.345.678.910。
我尝试了以下代码,但无法正常工作。

procedure TForm1.Button1Click(Sender: TObject);
var
j,iPos,i, x, y : integer;
sTemp, original, hasil, data : string;
begin

 original := edit1.Text;
 sTemp := '';
  j := length(edit1.Text);
 i := 3;
   while i < j do
    begin
      insert('.',original, (j-i));
      edit1.Text := original;
      j := length(edit1.Text);
       for x := 1 to y do
        begin
         i := i + ( i + x );
        end;
    end;
   edit2.Text := original;

3 个答案:

答案 0 :(得分:4)

在Delphi http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.Format中有System.SysUtils.Format调用。

此呼叫将'm'字符理解为货币专用格式化程序。 试试这样的代码:

Value := 12345678910;
FormattedStr := Format('Money = %m', [Value])

默认情况下,Format将使用系统范围的格式设置,如果您必须覆盖默认系统设置,请参见官方文档:

  

转换由CurrencyString,CurrencyFormat,   NegCurrFormat,ThousandSeparator,DecimalSeparator和   CurrencyDecimals全局变量或其等价物   TFormatSettings数据结构。如果格式字符串包含   精度说明符,它会覆盖由   CurrencyDecimals全局变量或其等效的TFormatSettings。

答案 1 :(得分:1)

此功能执行您指定的操作:

function FormatThousandsSeparators(Value: Int64): string;
var
  Index: Integer;
begin
  Result := IntToStr(Value);
  Index := Length(Result) - 3;
  while Index > 0 do
  begin
    Insert('.', Result, Index + 1);
    Dec(Index, 3);
  end;
end;

请注意,您的示例12345678910不适合32位带符号整数值,这就是为什么我使用Int64

此功能不能正确处理负值。例如,当传递'-.999'时,它将返回-999。可以这样处理:

function FormatThousandsSeparators(Value: Int64): string;
var
  Index: Integer;
  Negative: Boolean;
begin
  Negative := Value < 0;
  Result := IntToStr(Abs(Value));
  Index := Length(Result) - 3;
  while Index > 0 do
  begin
    Insert('.', Result, Index + 1);
    Dec(Index, 3);
  end;
  if Negative then
    Result := '-' + Result;
end;

答案 2 :(得分:0)

我现在知道,它是如此简单。只需使用

showMessage(formatFloat('#.###.00', strToFloat(original)));

但是谢谢雷米,你打开了我的视野。