Опять про округление....

ПНР и сопровождение

Модераторы: m0p3e, edward_K, Модераторы

Ответить
sol
Постоянный обитатель
Сообщения: 165
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Орловская обл. коммерческая организация

Опять про округление....

Сообщение sol »

Коллеги, объясните, пожалуйста почему при вводе цены с копейками, например, в документе-основании Галактика заносит в Spstep.price не 47.67, а 47,6699999999999917.
Настройки округления не помогают, если конечно не округлить до целого числа. Почему в поле Spstep.price не заносится цифра, которую я набираю с клавиатуры? Никто не разобрался по какому алгоритму заносятся числа? Или это глюк Btrieve? Прияем закономерности нет никакой, может занести дробное число, как набрано с клавиатуры, а может последнюю цифру растащить до 16 знака после запятой. Кто не сталкивался с этой проблемой- станьте на поле с ценой и нажмите Ctrl+F4 (вызов вычислителя)и увидите число которое реально записано в таблице....
ALEKS123
Местный житель
Сообщения: 278
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Опять про округление....

Сообщение ALEKS123 »

А никто не знает по какому алгоритму они вносятся. Например 1,5 один раз может "занестись" как 1,5000000000001, а в другой раз как 1,499999999888. :-/ Когда только начинал работать с Галкой, в ДТП получил такой ответ - числа описаны как DOUBLE, поэтому что там происходит.. ??? ??? ??? ??? На сем успокоился. И больше не выясняю.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Опять про округление....

Сообщение m0p3e »

Это именно трабла double! И не только Бетрив. Столкнулся когда писал на дельфях учет семейного бюджета. Типа домашней бухгалтерии. БД брал Paradox и dBase. В обеих наталкивался на такой эффект. Пришлось округлять при выборе данных до 2-х знаков.
Fortune_SC
Сообщения: 1
Зарегистрирован: 29 мар 2005, 17:49
Откуда: РБ, обл. г. Гродно ФОРТУНА
Контактная информация:

Re: Опять про округление....

Сообщение Fortune_SC »

1,5000000000001 или 1,499999999888 - какая разница

добави в cfg

[Common]
DeltaDouble=0.00001

и у тебя будет 1,5 (в расчетах)

и неважно что он там по Ctrl+F4 пишет 8)
Ответить