【问题标题】:How to use Delphi's AsCurrency to show currency without currency symbol?如何使用 Delphi 的 AsCurrency 显示没有货币符号的货币?
【发布时间】:2010-03-30 18:49:52
【问题描述】:

我正在尝试在网格中显示货币值,但我不希望显示货币符号:

if fPreferences.WorksheetFormat = 'Numeric' then
begin
  CurrencyString := '';
  Value := FieldByName('UnitList').AsCurrency;
end else
  Value := CurrToStrF(FieldByName('UnitList').AsCurrency, ffCurrency, 2, langFormat);

问题是它仍然显示货币符号。我在这里做错了什么?我不认为我可以使用 CurrToStrF,因为我需要网格将数字导出到 excel,而不是字符串。或者,有什么方法可以使用 AsFloat,但必须保留小数位? (100.00)

【问题讨论】:

    标签: delphi


    【解决方案1】:

    使用默认格式字符串时,执行CurrencyString := '';影响以下所有货币格式,因此应该显示所有货币变体/fields 值不带 $ 符号,同时保留其数字性质

    但是,当您明确使用您自己的 TFormatSettings langFormat 格式化您的货币值时,它没有效果,除非您以前这样做

    langFormat.CurrencyString := '';
    

    【讨论】:

    • 但我正在尝试格式化将成为货币的值,而不是将使用 CurrToStrF 设置的值 - 如何更改货币值以不显示货币符号?
    • 不确定我是否理解...货币符号与货币值无关,而是与 FormatSettings 相关联,要么是在未另行指定时默认使用的默认符号,要么是像您的 langFormat.CurrencyString 这样的特定符号.因此,如果您的 Value 是 Currency,它将保持为 Currency 但默认情况下将根据全局 CurrencyString 显示。如果您将其从“$”更改为“@”,您的值将显示为 @12.34,而不是像以前那样显示为 $12.34。
    【解决方案2】:

    将 ffCurrency 更改为 ffFixed 应该去掉货币符号,但不会有任何数百个分隔符。

    //带分隔符

    sStrVar := FormatCurr('#,##0.00', CurrVar);

    【讨论】:

      【解决方案3】:

      一个非常简单的解决方案是自己更改 CurrencyString 并稍后将其更改回原始值。

      if fPreferences.WorksheetFormat = 'Numeric' then
      begin
        CurrencyString := '';
        Value := FieldByName('UnitList').AsCurrency;
      end else
        begin
          OldCurrStr := CurrencyString;
          CurrencyString := '';
          Value := CurrToStrF(FieldByName('UnitList').AsCurrency, ffCurrency, 2, langFormat);
          CurrencyString := OldCurrStr;
        end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        • 2012-02-22
        • 2018-03-29
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多