Question

Le problème est le suivant: lorsque j'ajoute deux doublons ou plus d'un tableau à une vue, au lieu de me donner les bons résultats, cela ajoute environ dix chiffres ou plus. Par exemple, 0,5 + 1,5 = 199999999998 ou 5,5 + 8,5 = 14,0000000001. Des idées? (Je sais que c'est en quelque sorte une question n00b et je me souviens d'avoir dû faire face à de telles choses lors des examens de 9e année, mais je ne me souviens plus comment je l'avais fait à l'époque: P)

Était-ce utile?

La solution

http://dev.mysql.com/ doc / refman / 5.0 / fr / string-functions.html # format_fonction

Vous pouvez formater les nombres de cette manière si c’est ce que vous recherchez?

Autres conseils

L'ajout de 1 et 1 en tant que flottants ou doubles ne devrait avoir pour résultat que 2.

J'ai du mal à croire que 0,5 + 1,5 soit autre chose que 2.

Tous ces nombres peuvent être représentés correctement en virgule flottante binaire.

Je déteste dire que je ne crois pas vos exemples, mais je ne les crois pas. : -)

Cependant, je pense que vous pourriez avoir des problèmes avec un chiffre tel que 1.1.

Pourquoi? Parce que 1/10 s'avère être un nombre décimal répété en binaire.

Le problème survient lorsque l'on tente de convertir des nombres en virgule flottante entre des représentations décimales et binaires. Certains chiffres rendent le voyage correct, mais d’autres ne sont que des approximations.

Cependant, si vos exemples fonctionnent vraiment de la sorte, je n'ai aucune idée de ce qui se passe et j'aimerais bien savoir.

  
    

les nombres en virgule flottante sont TOUJOURS de simples approximations. :-) Si la précision compte, trouvez un moyen d'utiliser des entiers.

  

D'après mon expérience, lorsque j'utilisais un type de données décimal au lieu de float / double, les résultats étaient toujours précis.

Cet article explique assez bien le problème.

En résumé, des nombres très grands ou très petits en virgule flottante peuvent entraîner une perte de précision lors des calculs.

Ne vous attendez pas à des entiers lorsque vous travaillez avec des types à virgule flottante.

Vous ne savez pas si vous cherchez une explication ou une solution, mais comme vous avez déjà reçu des indications pour de bonnes explications ....

Si vous souhaitez que vos nombres se comportent comme des entiers, utilisez des entiers. Si vous avez besoin d'un degré de précision fini (deux décimales, pour les champs représentant de l'argent), stockez-le néanmoins sous forme de nombre entier, mais multipliez-le par le facteur de 10 dont vous avez besoin pour vous débarrasser de la décimale. la base de données et divisez par le même lorsque vous le retirez.

Ainsi, si vous représentez un widget coûtant 3,99 $, vous mettez 399 dans le champ WIDGET.cost.

Je ne sais pas si cela s'applique à votre situation ou non. Mais la règle générale est que les nombres à virgule flottante sont TOUJOURS de simples approximations. :-) Si la précision compte, trouvez un moyen d'utiliser des entiers.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top