Возможные Дублировать:
Why don't operations on double-precision values give expected results?проблема Округление с двойным типом
Я испытываю особую проблему в C++. Я создал переменную типа Double. Затем я сделал некоторые вычисления с некоторыми значениями, назначенными другим переменным, и назначил результат двойной объявленной переменной I. Это дало мне результат с длинной десятичной частью. Я хочу, чтобы он округлялся до двух знаков после запятой. и сохраните его в переменной. Но даже после нескольких попыток округления я не мог обойти его до двух знаков после запятой.
Затем я попробовал другой способ проверить, какова настоящая проблема. Я создал двойную переменную и присвоил ей значение 1.11. Но когда я отлаживал его, поставив точку останова и добавив часы для этой переменной, я мог обнаружить, что значение, которое теперь хранится в переменной, равно 1.109999999999.
Мой вопрос в том, почему это так выглядит? Разве нет способа, по которому мы можем округлить переменную до двух десятичных знаков? Почему он показывает длинную десятичную часть, даже если мы назначим число с двумя десятичными знаками?
Пожалуйста, предложите способ хранения чисел - независимо от того, рассчитана или назначена напрямую - как есть, в двойной переменной, а не в номере с длинной десятичной частью.
Не использовать арифметику с плавающей для вычислений с фиксированной точкой. –
double d = 1.3894637; int i = ceil (d * 10); –