如何标记成千上万的整数?
只是说我有一个整数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;
答案 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)));
但是谢谢雷米,你打开了我的视野。