Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 598

/ вопрос открыт /

Здравствуйте!
Есть небольшая проблемка, может быть, кто сталкивался.
Вычисляемые поля в ADO.
Три поля:
Поле3:=Поле2-Поле1 (ADOTable1K_H_V_Rash.Value:=ADOTable1K_H_V_S2.AsFloat-ADOTable1K_H_V_S1.AsFloat;)
Поле3 – вычисляемое поле.
Формат везде Float
Сама база данных создана в Accsess
Теперь вопрос.
Не знаю, по каким принципам идет отбор безобразия, но иногда решение корректно, иногда не очень.
Если, например, Поле2=9,7 а поле Поле1=9,5 получается 0,199999999999999
Что делю не так? Как избавиться от безобразия?

Вадим1979 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Вадим1979 (статус: Посетитель)
Вопрос отправлен: 4 апреля 2009, 23:01
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 5 апреля 2009, 10:58; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 4 апреля 2009, 23:47 [#1]:

да все правильно. просто надо изучать машинную арифметику и всё. дело в том, что дробные числа (почти все) не могут быть представлены точно, а лишь приблизительно. И если хочется "красивых результатов" - надо просто делать округление. Поможет функция Round. Но она округляет до целого. Если же к примеру надо округлить до двух цифр после запятой, применяют ход конём
Round(x*100) / 100. хотя и такой подход иногда дает чудеса.
Итого. подобные результаты - это не прихоть программистов, это абсолютно нормальная ситуация, являющаяся следствием особенностей двоичного представления чисел.
Галочка "подтверждения прочтения" - вселенское зло.
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 5 апреля 2009, 10:46 [#2]:

Да, это ошибки округления, в Access такое происходит достаточно часто, особенно если поле одинарной точности (вроде). Кстати, а ведь когда создается статическое поле, там же можно формат указать (в частности, округление до N знаков после запятой)?
Вадим1979

Вадим1979 (статус: Посетитель), 5 апреля 2009, 10:56 [#3]:

При создании БД в Access формат округления до 2 знаков после запятой результата не дает (пробовал до опубликования вопроса), но все равно спасибо за наводку.
Вадим1979

Вадим1979 (статус: Посетитель), 5 апреля 2009, 10:58 [#4]:

Ответ Вадима К все объясняет.
Пошел пробовать ход конем.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:47
Выполнено за 0.02 сек.