Comment puis-je dire explicitement Python de lire un nombre décimal en utilisant le point ou la virgule comme séparateur décimal? Je ne connais pas les paramètres de localisation du PC qui exécuteront mon script, et cela ne devrait pas influencer mon application, je veux seulement dire:
def read_float_with_comma(num): return float(num.replace(",", ".")
3 Réponses :
Parce que je ne connais pas les paramètres locaux p>
Vous pouvez rechercher cela à l'aide de
locale code> module A>: p>
xxx pré> ou p>
xxx pré> en utilisant cela, votre code pourrait devenir: p>
xxx Pre> Mieux encore, le même module a une fonction de conversion pour vous, appelée
atof () code>
: p>xxx pré> blockQquote>
Cela utilisera les paramètres locaux, ce qui n'est peut-être pas ce que veut Diegogb. Et si vous avez besoin de produire / analyser des données dans une locale différente en tant que courant? Le module local décourage explicitement la modification des paramètres régionaux dans une bibliothèque. Cette méthode n'est donc valable que pour des scripts simples.
@ Jeckyll2Hide: Pour des scripts simples ou des programmes d'interface graphique de bureau ou autre chose qui n'a pas besoin de servir plusieurs clients (en réseau).
@ Jeckyll2Hide: Mais l'OP souhaitait spécifiquement savoir ce que le PC sur lequel son script serait exécuté, c'est donc exactement ce qui était recherché. C'est pourquoi la OP a marqué cette réponse comme acceptée; leur problème a été résolu.
Eh bien, pas vraiment: l'OP a voulu forcer un format indépendant de la locale actuelle. Ce qui signifie, soit réinventer la roue en mettant en œuvre sa propre fonction pour analyser la virgule ou le point, ou forcer une locale qui utilise ce qu'il a besoin dans chaque cas. Mais la modification de la locale est découragée et lente, de sorte que toute application mise en œuvre à l'aide de ce changement locale ne devrait le faire qu'une fois (idéalement au début de l'application). Cette application sera très inflexible: elle n'utilisera / sortira que dans un format prédéfini et la modification nécessitera un redémarrage. Je ne vois pas comment cela peut être bon pour une interface graphique.
@ Jeckyll2Hide: Bien sûr, > Locale code> peut être douloureux . Mais j'ai compris la question: je veux savoir quel séparateur utilise la locale lorsqu'il représente les numéros de points flottants. Quelles autres options sont là pour interroger le système d'exploitation pour ces informations?
Utiliser uniquement _Locale_radix est une étape très dangereuse.
@iliasiliadis: de quelle manière est-ce très dangereux i>?
@ Martijn Pieters Utilisation uniquement B> est le point clé. Conversion d'une chaîne comme "1.000.000.000.000" i>, Utilisation de B> Le RADIX, à "1.000.000.000" i> fera le code inutilisable.
@iliasiliadis: C'est juste un bug simple. Rien dangereux i> à propos d'un tel bogue.
@ Martijn Pieters Si proposant aux utilisateurs, une façon de créer, dans leur code, des bogues avancées connues ne sont pas un " proposer quelque chose de dangereux i>" alors ok.
Vous pouvez utiliser locale.atof code>
Vous pouvez utiliser Babel pour analyser les décimales dans Formats locaux:
>>> parse_decimal('1,099.98', locale='en_US') Decimal('1099.98') >>> parse_decimal('1.099,98', locale='de') Decimal('1099.98')
Comme babel.pocoo.org/fr/latest/numbers.html#parsing -numbers états dans une note: l'analyse de numéro n'est pas correctement mise en œuvre b>
Qu'est-ce que
1 000 code>: un ou un mille?
@Katrielaalex: Exactement, cela dépend de la locale.