2010-03-30 158 views
2

我想显示在网格中的货币价值,但我不希望被显示的货币符号:如何使用Delphi的AsCurrency显示货币没有货币符号?

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

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

回答

4

CurrencyString := '';影响所有时使用默认格式字符串,因此以下格式货币应该显示所有货币变量/字段的值没有$符号,而保留他们的数字性质

但是当你明确格式自己TFormatSettings langFormat您的货币价值,它有没有影响,除非你以前做过

langFormat.CurrencyString := ''; 
+0

但我试图格式化值将是一种货币,而不是将设置与CurrToStrF值 - 我如何更改货币值不显示货币符号? – croceldon 2010-03-31 13:25:29

+0

不知道我明白...货币符号没有链接到货币值,而是链接到FormatSettings,或者是默认情况下默认使用的货币符号,而不是特定的货币符号或像langFormat.CurrencyString这样的特定符号。因此,如果您的值是货币,则它将保留一个货币,但默认情况下会根据全局CurrencyString显示。如果您将它从“$”更改为“@”,那么您的价值将像以前一样显示为@ 12.34而不是$ 12.34。 – 2010-03-31 17:02:41

2

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

//随着隔板

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

0

一个非常简单的解决办法是改变中的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;