2008-09-17 107 views
7

我需要编写一个Delphi应用程序,从数据库中的各个表中提取条目,不同的条目将使用不同的货币。因此,我需要为每种货币数据类型($,磅,欧元等)显示不同数量的小数位数和不同的货币字符,具体取决于我已加载的物品的货币。在Delphi中,如何以不同形式显示不同货币的货币数据类型?

有没有办法改变货币几乎是全球性的,也就是说,对于表单中显示的所有货币数据?

回答

7

即使是同一种货币,你可以有不同的格式(分隔符为例),显示值,所以我建议你语言环境,而不是货币只与你的价值观联系起来。
您可以使用简单的整数来保存LCID(区域设置ID)。
在这里看到名单:http://msdn.microsoft.com/en-us/library/0h88fahh.aspx

然后显示值,使用类似:

function CurrFormatFromLCID(const AValue: Currency; const LCID: Integer = LOCALE_SYSTEM_DEFAULT): string; 
var 
    AFormatSettings: TFormatSettings; 
begin 
    GetLocaleFormatSettings(LCID, AFormatSettings); 
    Result := CurrToStrF(AValue, ffCurrency, AFormatSettings.CurrencyDecimals, AFormatSettings); 
end; 

function USCurrFormat(const AValue: Currency): string; 
begin 
    Result := CurrFormatFromLCID(AValue, 1033); //1033 = US_LCID 
end; 

function FrenchCurrFormat(const AValue: Currency): string; 
begin 
    Result := CurrFormatFromLCID(AValue, 1036); //1036 = French_LCID 
end; 

procedure TestIt; 
var 
    val: Currency; 
begin 
    val:=1234.56; 
    ShowMessage('US: ' + USCurrFormat(val)); 
    ShowMessage('FR: ' + FrenchCurrFormat(val)); 
    ShowMessage('GB: ' + CurrFormatFromLCID(val, 2057)); // 2057 = GB_LCID 
    ShowMessage('def: ' + CurrFormatFromLCID(val)); 
end; 
5

我会用SysUtils.CurrToStr(价值:货币; VAR FormatSettings:TFormatSettings):字符串;

我会设置一个TFormatSettings数组,每个位置配置为反映您的应用程序支持的每种货币。您需要为每个数组位置设置TFormat设置的以下字段:CurrencyString,CurrencyFormat,NegCurrFormat,ThousandSeparator,DecimalSeparator和CurrencyDecimals。