Je stocke un tas de données au format entier dans une table pytables. Les données sont factorisées sur les chaînes stockées flottantes, pour éviter toute perte de précision. À titre d'exemple:Arrondir les champs PyTables avec round()
>>> src.root.Timeseries.M1[0][5]
668000
Si i facteur sur le nombre brut, j'obtenir le bon résultat:
>>> round(668000/100000.0, 2)
6.68
Mais si je facteur sur la valeur int du champ PyTables, round() doesn « t travail du tout:
>>> round(src.root.Timeseries.M1[0][5]/100000.0, 2)
6.6799999999999997
le champ PyTables est définie par le type de données Int64Col().
Des idées sur ce qui se passe?
Intéressant. Surtout que j'avais l'espoir que round() retournerait un nouveau nombre avec beaucoup moins de décimales. En fait seulement 2 comme utilisé dans le deuxième paramètre. Est-ce que je tire la bonne conclusion quand je suppose que round() ne fonctionne pas sur dtypes numpy? Comment "Ce n'est qu'une question de savoir comment le nombre est représenté" n'est pas tout à fait clair pour moi.La raison de la confusion, c'est que lancer à float(), par expérience, en soi ne sera pas toujours un nombre exact. Donc, je pense actuellement que je ne suis pas plus proche de l'objectif initial de la représentation exacte. –
C'est le même numéro. Seule la façon dont il vous est montré est différente. Voir ma réponse mise à jour. –
Merci pour votre clarification. Apprendre cela, je recon en utilisant Decimal sera le moyen de maintenir la précision. La pénalité d'utiliser cDecimal est d'environ 119% de temps de calcul supplémentaire, mais je ne peux pas vivre avec l'alternative. –