Задать вопрос
serafims
@serafims

Откуда берется мусор в переменной с плавающей запятой в Delphi?

Есть текстовое поле, куда вбиваю что-то типа 340,788
Потом беру StrToFloat от текста в поле в переменную single, потом снова FloatToStr - и получаю - 340,787994384766.
Если округлить, а потом, скажем, 100 прибавить - все равно мусор добавляется в младших разрядах.
  • Вопрос задан
  • 351 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Из-за того, что число 340,788 невозможно точно отобразить в плавающей запятой. Никакой: ни single, ни double, ни extended. А FloatToStr на стандартных настройках предполагает точность не то double, ни то extended.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
@vilgeforce
Раздолбай и программист
Берется он из-за особенностей хранения дробных чисел.
Ответ написан
Комментировать
Vestail
@Vestail
Software Engineer
Попробуйте Double
Ответ написан
Комментировать
archakov06
@archakov06
Frontend-разработчик (ReactJS)
Или юзай Round()
Ответ написан
Комментировать
opium
@opium
Просто люблю качественно работать
Наверно все таки бинарно хранятся дроби а не десятичной ещё в школе это все проходят
Ответ написан
Комментировать
serafims
@serafims Автор вопроса
Решил задачу немного странно - убрал целую часть, домножил дробную до нужной мне точности (*1000) после знака, округлил до целого, убрав дробную часть.. Нужно было просто получить число, равное тысячным долям величины.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы