Problème simple, comment trouver le premier chiffre non zéro après point décimal. Ce dont j'ai vraiment besoin est la distance entre le point décimal et le premier chiffre non zéro.
Je sais que je pouvais le faire avec quelques lignes, mais j'aimerais avoir un moyen pythonique, agréable et propre de résoudre ce problème. p>
jusqu'à présent, j'ai ce p>
4 Réponses :
Le moyen le plus simple semble être J'ai interprété la deuxième entrée dans chaque paire de la liste t code> comme résultat souhaité, alors j'ai choisi
int () code> pour arrondir le logarithme vers zéro: p>
Assurez-vous de garder contre les valeurs négatives (ne peut pas prendre la journalisation) avec ABS.
@Paulmcguire: Bon point, mais comme je ne suis pas encore sûr que c'est ce que l'OP recherche du tout, j'attendrai un peu avant de mettre à jour la réponse.
Journal (0) n'est pas si bon non plus. OP aura probablement besoin d'une affaire spéciale cette valeur (élever la valeur ValueError ou renvoyer l'infini?).
J'ai utilisé math.floor code> pour des résultats plus cohérents au lieu de
int code>
Je pense que cela devrait être math.ceil code> !!! Par exemple
-Math.log10 (0.01) = 4.0 code> et
math.log10 (0.00011) = -2.999 code>. Ce dernier est arrondi vers
-2 code>, ce qui ne va pas.
Un moyen de se concentrer sur les chiffres après le point décimal consiste à retirer la partie entière du nombre, laissant sur la partie fractionnée, avec quelque chose comme . Après avoir isolé la partie fractionnée, vous pouvez laisser Python faire le comptage pour vous avec un x - int (x) code>.
% E code> (qui aide également à prendre soin des problèmes d'arrondi). P>
>>> '%e' % 0.000125
'1.250000e-04'
>>> int(_.partition('-')[2]) - 1
3
Bien que cela puisse être effectué techniquement avec une ligne (à l'exclusion de l'instruction d'importation), j'ai ajouté quelques éléments supplémentaires pour le rendre plus complet. Ce n'est probablement pas préoccupé Pour vous, mais j'ai pensé que je l'avais mentionné pour des raisons d'exhaustivité, dans certaines régions, des périodes et des virgules sont échangés lorsqu'il s'agit de chiffres. Par exemple, 1 000 000,00 peuvent être 1.000.000,00. Je ne sais pas si Python l'acquérie, mais comme il ne représente aucun chiffre avec des milliers de séparateurs, vous pouvez utiliser le modèle , (0 *) code> pour les autres régions. Encore une fois, cela ne compte probablement pas pour vous, mais cela peut à d'autres lecteurs. P> p>
import math ZerosCount = math.ceil(-math.log10(abs(value) - abs(math.floor(value)))) - 1
S'il vous plaît expliquer ce que cela fait.
Index de la première valeur non nulle dans la partie décimale de flatterie de caractères.
Il est préférable d'inclure l'explication du code dans la réponse. Le prochain lecteur n'a donc pas besoin de plonger dans les commentaires.