我需要编写一个Delphi应用程序,它从数据库中的各个表中提取条目,不同的条目将使用不同的货币。因此,我需要为每种货币数据类型($,Pounds,Euros等)显示不同数量的小数位和不同的货币字符,具体取决于我已加载的商品的货币。
有没有办法几乎全局更改货币,即表格中显示的所有货币数据?
答案 0 :(得分:7)
即使使用相同的货币,您也可能必须以不同的格式显示值(例如分隔符),因此我建议您仅将LOCALE与货币相关联而不是货币。
您可以使用简单的整数来保存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;
答案 1 :(得分:5)
我将使用SysUtils.CurrToStr(值:Currency; var FormatSettings:TFormatSettings):string;
我设置了一个TFormatSettings数组,每个位置都配置为反映应用程序支持的每种货币。您需要为每个数组位置设置TFormat设置的以下字段:CurrencyString,CurrencyFormat,NegCurrFormat,ThousandSeparator,DecimalSeparator和CurrencyDecimals。