2016-10-25 2 views
2

J'ai besoin de formater un nombre réel avec des zéros en tête dans la partie du nombre entier avant le point décimal. Je sais comment y parvenir avec des entiers, mais la syntaxe pour les réels m'échappe.Delphi - comment formater un nombre réel avec des zéros en tête?

Number := 1.234 ; 
SNumber := Format ('%2.3f', [Number]) ; 

Cela donne SNumber = ' 1.234' mais je veux '01.234'. Number est toujours 0..99.999

Répondre

7

En utilisant SysUtils.FormatFloat:

SNumber := FormatFloat('0#.###',Number); 

obtiendrez 01.234

Six paramètres fictifs et une zéro signifie ajouter des zéros à gauche.

+0

Merci - le vôtre était une solution «plus légère». J'ai oublié de poser des questions sur les * zéros postérieurs * (ie je veux que 1.23 soit affiché comme '01.230.) Sur la base de la syntaxe pour inclure les zéros en tête, je suppose que' FormatFloat ('0 #. ## 0', Number) ' – rossmcm

+0

En effet, doc dit: * Les emplacements du' 0 'le plus à gauche avant le point décimal dans la chaîne de format et le' 0 'le plus à droite après le point décimal dans la chaîne de format déterminent la plage des chiffres qui sont toujours présents dans la chaîne de sortie. * –

+0

Ceci bien sûr fonctionne même pour int à string 'SNumber: = FormatFloat ('0 ##', Number)' –

5

La largeur de la chaîne que vous voulez est 6 pas 2. En outre, vous voulez remplacer les espaces rembourrés par «0».

SNumber := StringReplace(Format('%6.3f', [Number]), ' ', '0', [rfReplaceAll]) ; 
+0

Merci d'avoir signalé l'erreur dans le spécificateur 'Format' - corrigée. – rossmcm

+0

De rien. Cette * erreur * est la partie importante de ma réponse. Spécificateur de largeur appliqué uniquement à la partie entière du nombre est une idée fausse commune. Je n'ai pas posté de réponse juste pour dire que les caractères d'une chaîne peuvent être remplacés. En tant que tel, j'ai soutenu votre question. –