This is topic Запись в БД MS Access in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
TRACE MODE базовая версия 6.10.1. Пытаюсь сохранить СПАД в таблице БД Access. Все прекрасно записывается, но реальное значение записывается только в "семицифровом" представлении, то есть в 6 цифр и разделитель.
То есть: 1.23456 пишется как 1.23456 11.23456 пишется как 11.2346 1111.231079 пишется как 1111.23 11111.234375 пишется как 11111.2
с целыми числами еще интересней: 123456 пишется как 123456 1234567 пишется как 1234570 12345678 пишется как 12345700
Получается, при попытке записать число разрядностью более 4х знаков, точность снижается до двух знаков после запятой, это при том, что мне требуется, как минимум три знака.
Как лечить?
PS. Профессиональная версия будет приобретена сразу, как только согласуем количество каналов.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
При перенаправлении СПАД в БД значения всех аналоговых величин передаются в диапазоне стандартного 4-байтового FLOAT. Такие величины корректно отображаются числами с количеством значащих цифр не более 6. Поле в таблице БД должно иметь формат "одиночное FLOAT". Целые числа передаются корректно в диапазоне 4-байтового целого. Формат поля БД должен быть соответствующим.
Posted by petrov_npa02 (Участник № / Member № 6640) on :
Спасибо за ответ, только я не совсем понял, извините.
Если "значения всех аналоговых величин передаются в диапазоне стандартного 4-байтового FLOAT", то почему теряется разрядность после запятой, при увеличении разрядности целой части?
Почему 1.23456 пишется как 1.23456, 11.23456 пишется как 11.2346, а 1111.231079 пишется как 1111.23? По какой причине уменьшается количество знаков после запятой? Мне нужно не менее трех знаков.
Поле в БД - одиночное FLOAT. Пробовал менять на двойное FLOAT - результат тот же.
Что я делаю не так?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Надо ознакомиться со стандартом формата FLOAT. Его мантисса содержит 23 бита, причем старший бит всегда равен 1. Поэтому число значащих цифр (суммарно - до и после запятой) не может превышать 6-7. В распространенных версиях стандарта (в зависимости от используемых компиляторов) - 6 значащих цифр.
Posted by petrov_npa02 (Участник № / Member № 6640) on :
Я знаком со стандартом представления действительных чисел (чисел с плавающей точкой) в двоичном коде.
Это что же получается - при записи данных в положение запятой в числе сдвигается таким образом, чтобы получилось число (из примера в предыдущем посте) 0,111123? И поэтому значение "обрезается"? Если так - то зачем?
Если нет, тогда почему при записи 1111.231079 записывается 1111.23? Где здесь 6 значащих цифр после запятой? Почему округляется до 2-х значащих цифр? Где это написано в стандарте IEEE 754?
Мне необходимо сохранять в БД значение массы продукта в резервуаре с точностью до килограмма, при том, что само значение массы считывается в тоннах. Как мне это реализовать для резервуара объемом 10000 м3?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Не надо путать диапазон и точность. Диапазон определяется диапазоном "порядка" в представлении числа. Точность определяется диапазоном изменения мантиссы - для одинарного FLOAT 0x7FFFFF = 8388607. Т.о., точность даже теоретически не может дать больше 7 десятичных знаков. На практике, как правило, не более 6. Ограничивается СУММАРНОЕ количество значащих цифр: до и после запятой. Именно поэтому число 1111.231079 округляется до 1111.23.
Вопрос не относится ни к Trace Mode 6, ни к БД. Топик закрывается.