2009-08-07 120 views
4

我正在与德尔福2009年,我疯了我的问题,但我得到的答案已过时,因为它不承认在Delphi2009 StrtoFloat。如何将int转换为货币?

我在问如何将一个整数,例如'1900000'转换为'1,900,000'?

+0

StrToFloat仍然包含在Delphi 2009中的SysUtils单元中。 http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/[email protected] – stukelly 2009-08-07 23:19:02

+0

你如何暴露一个问题? – 2009-08-17 09:38:38

回答

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命令不包含任何小数部分。 Format('%。3m',[4.0])的格式命令将返回$ 4.000。

+1

你是我的德尔福偶像,你知道的!但是这次我遇到了一个问题,它不会显示','逗号。而是仅仅是一个空格。我在C#中也遇到了这个问题,而我在C#中工作时曾询问过它。人们告诉我它有一个currencyFormat问题,我记得有一种方法可以在C#中完成。不知道delphi.I只需要逗号,它不必显示任何其他内容,并且知道这不会在每种货币类型上工作,您能否提出一些可以用逗号的东西?先谢谢你!希望我能投更多! – 2009-08-07 20:40:02

+0

感谢您的编辑,但我误解如何设置ThousandSeparator.If我使用'%,0m'它会引发异常。用极端的例子编辑了 – 2009-08-07 20:44:56

+0

。 – skamradt 2009-08-07 20:46:31

1

我目前使用的:

function FloatToCurrency(const f: double): string; 
begin 
    Result := FormatFloat('#,###.##;1;0', f); 
end; 

它不会与负数的工作,但因为你需要的货币,你不会有这个问题。

+0

@ Aldo,谢谢你的回答。我的代码:'sLabel1.Caption:= FormatFloat('#,###。##; 1; 0',StrToCurr(IntToStr(1900000)));'它显示'1 900 000'逗号在哪里? – 2009-08-07 20:23:06

+0

编辑:我使用StrToCurr(IntToStr()),因为我在我的应用程序中使用的数字是Int64 – 2009-08-07 20:25:11

+2

除了作为显示期间的转换之外,货币应该*永远*不是浮动。 – 2009-08-07 20:27:10

0

这不会是一个格式化的东西,delphi应该有一些类型的支持将数字格式化为字符串,你想要的方式是什么?除了更新版本的delphi更符合.net框架?

+1

Delphi 2009是用于原生win32开发的。delphi prism用于净。 – 2009-08-07 20:24:14

1

您可以直接通过转让分配整型货币,编译器会做转换为你:

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))版本。

带有FormatSettings的版本也是线程安全的。注意:您不能直接将Currency分配给Integer,您需要使用Int:= Trunc(Cur),但由于它首先转换为浮动(除非编译器做了一些聪明的事情),因此效率不高。