如何将int转换为货币?

时间:2009-08-07 20:12:30

标签: delphi types

我正在使用Delphi 2009,我把我的问题解决了,但我得到的答案已经过时,因为它在Delphi2009中无法识别StrtoFloat。

我问如何转换整数,例如'1900000'到'1,900,000'?

4 个答案:

答案 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框架更加一致?