|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 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 (статус: Посетитель), 5 апреля 2009, 10:56 [#3]:
При создании БД в Access формат округления до 2 знаков после запятой результата не дает (пробовал до опубликования вопроса), но все равно спасибо за наводку.
|
|
Вадим1979 (статус: Посетитель), 5 апреля 2009, 10:58 [#4]:
Ответ Вадима К все объясняет.
Пошел пробовать ход конем.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|