代码之家  ›  专栏  ›  技术社区  ›  apenwarr

在Delphi中,如何以不同的货币以不同的形式显示货币数据类型?

  •  7
  • apenwarr  · 技术社区  · 16 年前

    我需要编写一个Delphi应用程序,它从数据库中的不同表中提取条目,不同的条目将以不同的货币表示。因此,我需要为每种货币数据类型(美元、英镑、欧元等)显示不同的小数位数和不同的货币字符,具体取决于我加载的项目的货币。

    是否有一种方法可以几乎全局地更改货币,即对表单中显示的所有货币数据进行更改?

    2 回复  |  直到 16 年前
        1
  •  7
  •   Francesca    16 年前

    即使使用相同的货币,也可能需要以不同的格式显示值(例如分隔符),因此我建议您将区域设置而不是仅将货币与值相关联。
    您可以使用一个简单的整数来保存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;
    
        2
  •  5
  •   user16120    16 年前

    我将使用sysutils.currtostr(值:currency;var formatsettings:tformatsettings):string;

    我将设置一个tformatsettings数组,每个位置配置为反映应用程序支持的每种货币。您需要为每个数组位置设置以下tformat设置字段:currencystring、currencyformat、negcurrenformat、千位分隔符、小数分隔符和currencydecimals。