J'ai cette méthode statique, il reçoit un double et "coupe" sa queue fractionnaire en laissant deux chiffres après le point. fonctionne presque tout le temps. J'ai noté que quand il reçoit 2.3 il le tourne à 2.29. Cela n'arrive pas pour 0.3, 1.3, 3.3, 4.3 et 102.3. Code multiplie fondamentalement le nombre par 100 utilisations modf divise la valeur entière par 100 et le renvoie. Voici le code capture ce un numéro spécifique et imprime:modf renvoie 1 comme le fractionnaire:
static double dRound(double number) {
bool c = false;
if (number == 2.3)
c = true;
int factor = pow(10, 2);
number *= factor;
if (c) {
cout << " number *= factor : " << number << endl;
//number = 230;// When this is not marked as comment the code works well.
}
double returnVal;
if (c){
cout << " fractional : " << modf(number, &returnVal) << endl;
cout << " integer : " <<returnVal << endl;
}
modf(number, &returnVal);
return returnVal/factor;
}
il imprime:
nombre * = facteur: 230
fraction: 1
entier: 229
Est-ce que quelqu'un sait pourquoi cela se produit et comment puis-je résoudre ce problème? Merci et bonne fin de semaine.
Ainsi est-il une meilleure façon de « couper » cette queue et ne laisser que les 2 premiers chiffres après le point sans arrondi? – Matti
@Matti: Voir mise à jour. – kennytm