J'ai un numéro et j'ai besoin d'ajouter une décimale à celle-ci pour le formatage.
Le nombre est garanti d'être compris entre 1000 et 999999 (j'ai couvert les autres possibilités d'une autre manière, c'est celui que je ne peux pas Obtenez ma tête). J'ai besoin de mettre une décimale avant les 3 derniers chiffres, par exemple: p> Comment puis-je faire cela? P> p>
6 Réponses :
$num =~ s/(\d{3})$/.$1/ That says: Take a block of 3 digits (that must be anchored at the END of the string) and replace them with a "." followed by whatever was just matched.
Ce n'est pas la meilleure réponse; Voir ci-dessous la réponse de Dragtun qui est préférable.
En fait, il est i> la meilleure réponse à la question qui a été posée, bien que cependant, pas la meilleure façon d'accomplir la tâche à accomplir. La question a spécifiquement demandé une expression régulière.
Voici une autre solution juste pour le plaisir de celui-ci:
dans perl substr () peut être une lvalue qui peut aider dans votre cas. p> ajoutera Un point avant les trois derniers chiffres. p> Vous pouvez également utiliser la version de Substr de quatre arguments (comme indiqué dans les commentaires) pour obtenir le même effet: P> substr( $num, -3, 0, '.' );
Mieux écrit comme " substr ($ num, -3, 0,". '); Code> "
Ouais! Voir aussi: Stackoverflow.com/questions/505028/...
Et pourtant une autre façon de s'amuser; -)
my $num_3dec = sprintf '%.3f', $num / 1000;
Je pense que cela exprime trop clairement la signification des données d'entrée et doit être évité en faveur de quelque chose de plus mystérieux :-)
+1 C'est la bonne réponse à la question. Le fait que l'OP croyait à tôt une substitution de regex était nécessaire ne change pas cela.
Non, ce n'est pas nécessairement la réponse droite i> à la question. Si vous avez un Perl de 64 bits et> 15 numéros de 15 chiffres, cela pourrait bien être la mauvaise réponse, tandis que le substrateur ou S /// fonctionnera toujours.
@ysth: Oui, mais la question était limitée à 1000 - 999999 (entiers), il est donc "la bonne réponse" ;-)
Correct. Surtout que les solutions RE & SUBSTR fournies ne fonctionneront pas si le nombre est inférieur à 1000 ;-)
Golf Quelqu'un?
Est-ce que je manque quelque chose ici? Si vous avez un numéro entre 999999 et 1000, cela devrait représenter un nombre compris entre 999,999 et 1 000, vous devriez pouvoir simplement: P>
$ num / = 1000.000; p>
/ pf p>
Et ça?
Les expressions régulières sont un outil polyvalent, mais ils ne sont pas le seul i> outil. Qu'est-ce qui vous fait si sûr qu'ils sont le bon outil de formatage d'un numéro?
Gros avertissement avec celui-ci. L'utilisation d'une expression régulière peut entraîner un comportement inattendu si vous manipulez les chiffres de Perl. Sur ma machine, si je fais
mon $ num = 11745.041 - 11739.7; Imprimer $ num; code>, il fournit: "5.34099999999853". Appliquer la regex répertoriée dans la réponse acceptée d'Adam avant que l'instruction d'impression ne change que sur "5.34099999999.853". Probablement pas ce que vous cherchez. Utilisation de
Num = Sprintf ('%. 3F', $ NUM); code> Comme la réponse par @draegtun, produit l'attendu: "5.341".