我正在使用Delphi 2009,我把我的问题解决了,但我得到的答案已经过时,因为它在Delphi2009中无法识别StrtoFloat。
我问如何转换整数,例如'1900000'到'1,900,000'?
答案 0 :(得分:8)
您也可以使用format命令。因为格式需要实数,所以将0.0加到整数会有效地将其转换为扩展类型。
Result := Format('%.0m',[intValue + 0.0]));
正确处理负数并添加用户区域设置的货币符号。如果不需要货币符号,则设置CurrencyString:='';在通话之前,然后恢复它。
SavedCurrency := CurrencyString;
try
CurrencyString := '';
Result := Format('%.0m',[intValue + 0.0]));
finally
CurrencyString := SavedCurrency;
end;
要强制使用逗号,只需设置ThousandSeparator:=',';
CurrencyString := '!';
ThousandSeparator := '*';
Result := Format('%.0m',[-1900000.0]);
// Returns (!1*900*000) in my locale.
掩码中的“句点”确定浮点的小数部分将如何显示。由于我之后传递了0,它告诉format命令不包含任何小数部分。格式('%。3m',[4.0])的格式命令将返回$ 4.000。
答案 1 :(得分:1)
我目前使用它:
function FloatToCurrency(const f: double): string;
begin
Result := FormatFloat('#,###.##;1;0', f);
end;
它不适用于负数,但由于您需要货币,因此您不会遇到这个问题。
答案 2 :(得分:1)
您可以通过赋值直接将Integer分配给Currency,编译器将为您进行转换:
var
Int : Integer;
Cur : Currency;
begin
Int := 1900000;
Cur := Int;
ShowMessage(CurrToStr(Cur)); // 1900000
ShowMessage(Format('%m', [Cur]); // 1,900,000.00 in US/UK/NZ/AU etc, "1 900 000,00" in Spain etc.
ShowMessage(Format('%.0m', [Cur]); // 1,900,000 in US/UK/NZ/AU etc, "1 900 000" in Spain etc.
end;
如果您希望使用西班牙语区域设置的逗号设置ThousandSeparator:=',';或者使用扩展的CurrToStrF(金额,ffCurrency,小数,格式设置)版本。
FormatSettings的版本也是线程安全的。
注意:你不能直接将Currency分配给Integer,你需要使用Int:= Trunc(Cur),但这是低效的,因为它首先转换为float(除非编译器做了一些聪明的事情)。
答案 3 :(得分:0)
这不是一个格式的东西,delphi应该有一些类型的支持,以你想要的方式将数字格式化为字符串?除此之外,新的delphi版本是否与.net框架更加一致?