2010-03-30 4 views
2

J'essaie d'afficher une valeur monétaire dans une grille, mais je ne veux pas le symbole monétaire à afficher:Comment utiliser l'AsCurrency de Delphi pour afficher la devise sans le symbole monétaire?

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

Le problème est qu'il est toujours montrant le symbole monétaire. Qu'est-ce que je fais mal ici? Je ne pense pas pouvoir utiliser CurrToStrF, car j'ai besoin de la grille pour exporter un nombre vers Excel, pas une chaîne. Ou, est-ce que je peux utiliser AsFloat, mais avec des décimales? (100.00)

Répondre

4

Faire CurrencyString := ''; aura effet toutes les conditions suivantes le formatage des devises lorsque en utilisant les chaînes format par défaut et devrait donc affichage toutes les variantes/champs monétaires valeurs sans signe $, tout en conservant leur nature numérique.

Mais quand vous explicitement le format de votre valeur de la monnaie avec vos propres TFormatSettings langFormat, il n'a aucun effet à moins que vous avez fait précédemment:

langFormat.CurrencyString := ''; 
+0

Mais je suis en train de formater la valeur qui sera une monnaie, pas la valeur qui sera réglée avec CurrToStrF - comment puis-je changer la valeur de la monnaie pour ne pas afficher le symbole monétaire? – croceldon

+0

Je ne suis pas certain de comprendre ... Le symbole de devise n'est pas lié à une valeur de devise mais à un paramètre FormatSettings, celui par défaut utilisé par défaut lorsqu'il n'est pas spécifié ou un paramètre spécifique comme votre 'langFormat.CurrencyString'. Donc, si votre valeur est une devise, elle restera une devise mais sera affichée par défaut en fonction de la chaîne monétaire globale. Si vous le changez de '$' à '@', votre valeur sera alors affichée comme @ 12.34 au lieu de $ 12.34 comme avant. –

2

La modification de ffCurrency en ffFixed devrait supprimer le symbole monétaire, mais il n'y aurait pas de séparateur de centaines.

// Avec les séparateurs

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

0

une solution très simple serait de changer le CurrencyString Référez-vous à et revenez à la valeur d'origine plus tard.

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; 
Questions connexes