1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Округление Accessa

Тема в разделе "Delphi - Базы данных", создана пользователем Experimentator, 27 апр 2011.

  1. Experimentator

    Регистрация:
    24 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Всем привет!!! Помогите уже незнаю что делать, есть база в аксесе 2003, доступ к ней осуществляю через делфи, так вот есть в БД поле с плавающей запятой, когда ввожу 0,13 она выдаёт 0,12999898755 и дополнительную чепуху в таком роде, как сделать так чтобы при в воде дробных чисел оно таким и оставалась например ввожу 5,36 оно и останется 5,36, а не 5,35998889989
    в аксесе все типы перепробывал фиксированные, с числом десятичных знаков ничего непомает.
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Это не бага... это фича... :)
    ну... если не нравится... можно не юзать тип FLOAT...
    Выдержка из мануала:
     
  3. Experimentator

    Регистрация:
    24 май 2008
    Сообщения:
    8
    Симпатии:
    0
    Ввожу действительный тип а потом нельзя запятую поставить!!!
     
  4. Experimentator

    Регистрация:
    24 май 2008
    Сообщения:
    8
    Симпатии:
    0
    :) :facepalm: :facepalm: :facepalm: :facepalm:
     
  5. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Ну... как Вам по проще объяснить то...
    Тип данных "double, с плавающей точкой" по жизни неточный тип данных, там нет какой-то точности...
    Для хранения double (диапазон от –1,797*10308 до 1,797*10308) Access выделяет 8 байт памяти.
    Фактически Access ничего не знает про вашу запятую... ему просто некуда ее поставит (записать, сохранить)...
    вместо этого он к вашему числу (на входе) применяет некую... скажем так, формулу... в результате которой получается некое целое число...
    Вот это число как раз и ложится в отведенную память.
    Затем, когда вы запросом "вынимаете" это число из "хранилища", Access применяет "формулу обратного преобразования" и выдает вам результат очень похожий на исходное дробное число...
    При этом "типа точность" гарантирована в пределах количества знаков после запятой, указанных в свойствах конкретного поля таблицы базы данных...
    Не понятно объясняю? Спросите у гугла по словам "работа с числами с плавающей точкой" и "дискретная математика"

    Варианты на тему "а что же делать то?"
    Первый:
    1) тип поля БД не меняем, в его свойствах выставляем (кол-во знаков после запятой = 2)
    2) Перед тем как положить туда дробное число (к примеру 0,13 ), "поганим" его сами.
    Код (Delphi):
    a := 0.13;
    a := a + 0.00000000000001;
    Второй (если все расчеты у Вас происходят в Delphi а база Access только для запросов репорта):
    1) тип поля БД меняем на Текстовый
    2) Перед тем как положить туда данные, приводим дробное число к строке.

    Третий (если база Access только для хранения данных а выборка и отображение происходят через Delphi)
    1) тип поля БД меняем на Длинное целое
    2) Перед тем как положить туда данные, приводим дробное число к целому.
    Код (Delphi):
    a := 0.13;
    b := Trunc(a*100);
    Также можно данному полю назначить тип "Мастер подстановок" и записывать туда формулу обеспечивающую необходимую вам точность отображения данных... Но это уже вам в документацию по Access...
     
  6. V88

    V88 Well-Known Member

    Регистрация:
    22 окт 2008
    Сообщения:
    51
    Симпатии:
    0
    Можно также попробовать сделать в Аксесе тип Целый с числом знаков после запятой 2 и в дельфи использовать функцию напр из едита FloatToStrF(Edtit1.Text,ffNumber,2)... Вроде как-то так...
     
Загрузка...
Похожие Темы - Округление Accessa
  1. zeitroid
    Ответов:
    1
    Просмотров:
    1.256
  2. Tomash
    Ответов:
    2
    Просмотров:
    1.853
  3. Antigo
    Ответов:
    10
    Просмотров:
    2.013
  4. sima12
    Ответов:
    1
    Просмотров:
    1.199
  5. sima12
    Ответов:
    5
    Просмотров:
    1.712

Поделиться этой страницей