This is topic Запись в БД MS Access in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001519.html

Posted by petrov_npa02 (Участник № / Member № 6640) on :
 
Здравствуйте!

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?

Диапазон данных в формате флоат (4 байта, одинарная точность):
00 00 00 00 hex= 5,87747175411144e-39 (минимальное положительное число)
80 00 00 00 hex=-5,87747175411144e-39 (минимальное отрицательное число)
7f ff ff ff hex= 6,80564693277058e+38 (максимальное положительное число)
ff ff ff ff hex=-6,80564693277058e+38 (максимальное отрицательное число)

Почему я не могу записать 1111.231079?

Мне необходимо сохранять в БД значение массы продукта в резервуаре с точностью до килограмма, при том, что само значение массы считывается в тоннах. Как мне это реализовать для резервуара объемом 10000 м3?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Не надо путать диапазон и точность.
Диапазон определяется диапазоном "порядка" в представлении числа.
Точность определяется диапазоном изменения мантиссы - для одинарного FLOAT 0x7FFFFF = 8388607.
Т.о., точность даже теоретически не может дать больше 7 десятичных знаков. На практике, как правило, не более 6.
Ограничивается СУММАРНОЕ количество значащих цифр:
до и после запятой.
Именно поэтому число 1111.231079 округляется до 1111.23.

Вопрос не относится ни к Trace Mode 6, ни к БД.
Топик закрывается.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2