Qt: округление 12,625 на 2 возвращает 12,62

Я не могу понять, почему код FF возвращает 12,62 вместо 12,63

 QDebug << QString::number(12.625, 'f', 2);

а также что будет решение для этого? В настоящее время мое решение заключается в следующем

QDebug << QString::number(12.625 + 0.0001, 'f', 2);

и он вернется 12.63,

Кстати, моя операционная система Ubuntu 11.04

3

Решение

GCC использует «округление до четности» или «округление банкира» в качестве режима по умолчанию, тогда как Visual Studio использует «округление до нуля»

Из документов GCC: округление

Это режим «по умолчанию». Следует использовать, если нет
нужно для одного из других. В этом режиме результаты округляются до
ближайшее представимое значение. Если результат на полпути между двумя
представимые значения, четное представимое выбрано. Даже здесь
означает, что младший бит равен нулю. Этот режим округления предотвращает
статистическое отклонение и гарантирует числовую стабильность: ошибки округления в
длительный расчет останется меньше половины FLT_EPSILON.

Чтобы изменить режим округления, используйте fesetround(FE_UPWARD) округлить вверх. Если вы не используете GCC, у вашего компилятора будет аналогичная опция.

Рик Реган предоставляет список сред программирования и их поведения округления по умолчанию. Непоследовательное округление

0

Другие решения

Для этого есть открытый отчет об ошибке:

https://bugreports.qt-project.org/browse/QTBUG-38171

0

По вопросам рекламы [email protected]