j'ai écrit le code suivant:C++ rond (49,5) retourne 49 lorsqu'elle est appelée avec variable (dans Qt)
void InputNodeInstance::changeSize(QString side, float mult) {
qDebug() << "width: " << width;
double widthMultiplied = width * mult;
qDebug() << "width * mult: " << width * mult;
qDebug() << "widthMultiplied: " << widthMultiplied;
qDebug() << "round(widthMultiplied): " << round(widthMultiplied);
qDebug() << "round(49.5): " << round(49.5);
width = width * mult + 0.5;
qDebug() << "width: " << width;
}
Et quand je l'appelle la fonction avec 0,9 comme mult
, je reçois cette sortie:
width: 55
width * mult: 49.5
widthMultiplied: 49.5
round(widthMultiplied): 49
round(49.5): 50
width: 49
Je suppose que la question est claire.
widthMultiplied
est 49,5.
round(49.5)
renvoie .
round(widthMultiplied)
renvoie .
Pourquoi?
Oui, probablement vous avez raison, j'ai aussi gardé cela à l'esprit, mais imprime le qDebug() 45,5 et pas 45.49999999. Je pense que le qDebug imprime le nombre entier – mep
@mep La précision par défaut pour 'qDebug' est de 6 chiffres de fraction. La solution que vous avez publiée peut toujours échouer avec d'autres numéros en raison des raisons décrites dans les articles liés. – kefir500
Mais pourquoi qDebug imprime-t-il alors 50? Il devrait imprimer 49.499999 à la place. Et s'il arrondit le nombre, comme je voulais le faire, le nombre ne peut pas être 49.499999 parce que la sortie est 50. Serait-ce une solution d'arrondir d'abord à une décimale puis d'arrondir à un nombre de 0 chiffres? – mep