如何将整数标记为数千和数百? 只是说我有一个整数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 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等效项给出的值。
此函数执行您指定的操作:
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;
我现在知道,它如此简单。只是用
showMessage(formatFloat('#.###.00', strToFloat(original)));
但是感谢雷米,你打开了我的脑海。