serafims
@serafims

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

Есть текстовое поле, куда вбиваю что-то типа 340,788
Потом беру StrToFloat от текста в поле в переменную single, потом снова FloatToStr - и получаю - 340,787994384766.
Если округлить, а потом, скажем, 100 прибавить - все равно мусор добавляется в младших разрядах.
  • Вопрос задан
  • 347 просмотров
Решения вопроса 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) после знака, округлил до целого, убрав дробную часть.. Нужно было просто получить число, равное тысячным долям величины.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект