| 
| 
 | Вопрос # 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]:Ответ Вадима К все объясняет. Пошел пробовать ход конем.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |