2017-01-10 3 views
0

Aujourd'hui j'ai remarqué question suivante sur IronPython2.7:(fer) Python problème de mise en forme avec l'opérateur modulo et « zéro négatif »

Lors du formatage d'un chaîne_format comme si, je reçois un « zéro negativ ». J'obtiens le même résultat si j'utilise Python2.7 ou Python3.4 au lieu d'IronPython.

>>> "%.2f" % -0.004 
'-0.00' 

Puis je réalise que je peux me débarrasser de la negativ zéro en passant deux arguments à la chaîne de format comme ceci:

>>> "%s%.2f" % ('x', -0.004) 
'x0.00' 

« x » est un caractère aléatoire. Donc, je formater une autre chaîne avant la valeur float et le moins disparaît. Cela ne fonctionne pas avec python2.7 et Python3.4 bien, où je reçois:

>>> "%s%.2f" % ('x', -0.004) 
'x-0.00' 

Quelqu'un sait-il ce qui se passe ici?

Quel est l'objectif du "zéro négatif" formaté?

+0

Cela ressemble à un bug dans IronPython. Il est supposé suivre l'implémentation de référence de CPython dans la mesure du possible. –

+0

Je ne sais pas si vous êtes au courant, mais le zéro négatif est une valeur flottante parfaitement valide: '-0.0'. Il est distinct de (mais égal à) zéro positif. Aucune idée pourquoi IronPython fait disparaître le signe moins avec une autre valeur dans la chaîne de format. – Blckknght

Répondre

0

(sous la direction de prendre en compte @MarkDikinson commentaire)

Vous pouvez formater le premier numéro, puis en faisant la printf -comme la mise en forme:

"%.2f" % (round(-0.004, 2)+0) 

Le +0 est là pour enlever le signe zéro négatif .

round peut également prendre un argument ndigits, pour spécifier de chiffres dont vous avez besoin pour l'arrondi du nombre lui-même (ne parle pas de l'affichage, qui est gérée par "%.2f").

+1

Pourquoi utiliser 'around' de NumPy au lieu de la fonction' round' intégrée de Python? (Et vous voulez probablement arrondir à 2 décimales ...) –

+0

@MarkDickinson vous avez raison! J'utilise numpy tout le temps au travail mais il y a un tour standard aussi;) – mguijarr

+1

@mguijarr l'installation numpy pour ironpython pourrait être problématique – Odomontois