:facepalm: :facepalm: :facepalm:
Ну... как Вам по проще объяснить то...
Тип данных "double, с плавающей точкой" по жизни неточный тип данных, там нет какой-то точности...
Для хранения double (диапазон от –1,797*10308 до 1,797*10308) Access выделяет 8 байт памяти.
Фактически Access ничего не знает про вашу запятую... ему просто некуда ее поставит (записать, сохранить)...
вместо этого он к вашему числу (на входе) применяет некую... скажем так, формулу... в результате которой получается некое
целое число...
Вот это число как раз и ложится в отведенную память.
Затем, когда вы запросом "вынимаете" это число из "хранилища", Access применяет "формулу обратного преобразования" и выдает вам результат очень похожий на исходное дробное число...
При этом "типа точность" гарантирована в пределах количества знаков после запятой, указанных в свойствах конкретного поля таблицы базы данных...
Не понятно объясняю? Спросите у гугла по словам "
работа с числами с плавающей точкой" и "
дискретная математика"
Варианты на тему "
а что же делать то?"
Первый:
1) тип поля БД не меняем, в его свойствах выставляем (кол-во знаков после запятой = 2)
2) Перед тем как положить туда дробное число (к примеру 0,13 ), "поганим" его сами.
Код:
a := 0.13;
a := a + 0.00000000000001;
Второй (если все расчеты у Вас происходят в Delphi а база Access только для запросов репорта):
1) тип поля БД меняем на
Текстовый
2) Перед тем как положить туда данные, приводим дробное число к строке.
Третий (если база Access только для хранения данных а выборка и отображение происходят через Delphi)
1) тип поля БД меняем на
Длинное целое
2) Перед тем как положить туда данные, приводим дробное число к целому.
Код:
a := 0.13;
b := Trunc(a*100);
Также можно данному полю назначить тип "
Мастер подстановок" и записывать туда формулу обеспечивающую необходимую вам точность отображения данных... Но это уже вам в документацию по Access...