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

问题描述 投票:1回答:3

如何将整数标记为数千和数百? 只是说我有一个整数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;
delphi integer currency pascal
3个回答
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
投票

此函数执行您指定的操作:

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;

0
投票

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

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

但是感谢雷米,你打开了我的脑海。

© www.soinside.com 2019 - 2024. All rights reserved.