J'utilise le code suivant pour arrondir à 2DP:Arrondi double - 0,5 - sprintf
sprintf(temp,"%.2f",coef[i]); //coef[i] returns a double
Il arrondit avec succès 6,666 à 6,67, mais il ne fonctionne pas correctement lorsque l'arrondissement 5,555. Il renvoie 5,55, alors qu'il devrait (au moins à mon avis) retourner 5,56.
Comment puis-je l'arrondir lorsque le chiffre suivant est 5? c'est-à-dire retour 5.56.
edit: Je réalise maintenant que cela se produit parce que quand j'entre 5.555 avec cin il obtient enregistré comme 5.554999997.
Je vais essayer d'arrondir en deux étapes, d'abord à 3dp puis à 2dp. (des idées plus élégantes)?
Cela semble un peu plus fiable que l'idée d'ajouter 0,0005, mais les deux fonctionnerait je suppose. Merci de votre aide! – Meir
Cela semble être un bug, vraiment. 5.5551 est arrondi correctement! – ypnos
Ce n'est pas buggé, @ypnos, vous n'avez tout simplement pas encore les limites du flottant. 5.5551 est représenté par 5.555100000000000370 ... qui sera arrondi, 5.555 est représenté par 5.5549999999 ... qui sera arrondi à la baisse. Vous pouvez voir que c'est un problème de représentation en essayant votre code avec 5.5500000000000000001 - les deux sorties sont les 5.55 incorrectes dans ce cas parce que le nombre N'EST PAS 5.55000 ... 1 quand il est stocké. C'est 5.549999 ... – paxdiablo