powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Округление при запросе к полю с плавающей точкой
15 сообщений из 15, страница 1 из 1
Округление при запросе к полю с плавающей точкой
    #38910713
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день
Попросили разобраться с такой проблемой - есть запрос, тянущий данные документов из спецификации, в том числе и цену, причем цену он считает как сумма в документе разделить на кол-во, иногда оно получается с большим знаменателем, например 32.52727777777778, но в запросе он округляется до двух символов. Когда это выгружается в 1с, то они считают это округленное значение умножить на кол-во и получают сумму по этому товару чуть больше. Как это в ODBC победить? При том же запросе из isql - получаю числа без округления, IBE показывает округленно, но при наведении курсора - показывает полное значение.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38910728
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

1 диалект? Или хранишь числа как DOUBLE PRECISSION?
Я бы посоветовал для внутренних расчётов от всяких там делений брать точность побольше, например 4, а не 2 знака.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38910738
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, первый диалект. Сорри,соврал немного - не до двух,а до трех.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38910848
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GallemarКогда это выгружается в 1с, то они считают это округленное значение
умножить на кол-во и получают сумму по этому товару чуть больше. Как это в ODBC победить?

Раз у тебя неверно считает 1С, то и побеждать надо в 1С.

Кстати, разве считать цену по среднему не запрещено теперь?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38910877
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

вообще это странно. Если как ты сказал округляется до трёх знаков, то
32.527 * N < 32.52727777777778 * N ? т.е. должно получится меньше
если до 2ух 32.53 * N > 32.52727777777778 * N то будет больше

В общем случае схождения результатов из-за ошибок округления не решаемая задача.

Я бы предложил округлять до 4ёх знаков. N какой приблизительно. Можешь назвать максимум?
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38910907
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

DOC_DATE DOCINDEX ID_CLIENTS ARTICUL PRICERUB QUANTITY OSTATOK
=========== ======== ============ ============================== ======================= ======================= =======================
19-MAR-2015 10458 87010 78.99000000000000 24.00000000000000 1.000000000000000
19-MAR-2015 10458 156506 113.4100000000000 12.00000000000000 6.000000000000000
19-MAR-2015 10458 155059 113.9200000000000 12.00000000000000 6.000000000000000
19-MAR-2015 10458 155046 32.52727777777778 180.0000000000000 210.0000000000000
19-MAR-2015 10458 134865 49.11000000000000 20.00000000000000 16.00000000000000
19-MAR-2015 10458 155038 126.7100000000000 12.00000000000000 1.000000000000000
19-MAR-2015 10458 98326 96.02000000000000 12.00000000000000 15.00000000000000
19-MAR-2015 10458 67871 74.10000000000001 12.00000000000000 4.000000000000000
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38912216
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

вот простой пример:
Колво = 29
Сумма = 112.35
Цена = Сумма / Колво = 3.87414
ЦенаОкругл = 3.87
Сумма1С = ЦенаОкругл * Колво = 112.23 - совсем не равно 112.35

Т.ч. как костыльный выход - не округлять цену до 2 знаков "при передаче в 1С". А нормальный выход - хранить цену и передавать ее куда и когда надо.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38912217
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockне округлять цену до 2 знаков
и до 3х, и до 4х..
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38912800
Фотография Exteris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockТ.ч. как костыльный выход - не округлять цену до 2 знаков "при передаче в 1С".Насколько я понял ТС-а, оно у него "само" где-то округляется.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38913876
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExterisНасколько я понял ТС-а, оно у него "само" где-то округляется.Ну значит не повезло ему в жизни. Тогда единственный выход - поставить в настройках галочку "Само не округлять".
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38914338
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockExterisНасколько я понял ТС-а, оно у него "само" где-то округляется.Ну значит не повезло ему в жизни. Тогда единственный выход - поставить в настройках галочку "Само не округлять".
Объяснил специалистам желтой программы кто им жить счастливо мешает,дальше не моя забота.
p.s. если у кого есть код подключения из 1с к FB с помощью ODBC (не ADO!!!!) - поделитесь пожалуйста.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38915810
Фотография PEAKTOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemarp.s. если у кого есть код подключения из 1с к FB с помощью ODBC (не ADO!!!!) - поделитесь пожалуйста.

а это как? вот мне тоже интересно.

особенно без объекта ADODB.Connection и ADODB.RecordSet.
тебе вообще что нужно? работать с базой Firebird прямо из родного скрипта 1С?
тогда вот так можно.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38916743
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PEAKTOP,думаю что округление идет при работе через ADO, пока правда не проверял,
некогда было.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38916798
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gallemar,

Я подозреваю, что "жёлтая программа" тут не при чём.
У тебя число как NUMERIC(15,3) объявлено, поди? Дело в особенности первого диалекта. Внутри число хранится как DOUBLE PRECISION, и любые расчёты ведутся с полной точностью, на сколько цифр хватит.
Тогда как разные "клиентские" библиотеки ведут себя по-разному с такими числами. Кто-то тупо получает как есть, double, а кто-то честно приводит к виду, заданному в типе, т.е. NUMERIC(15,3)

Проблема не в округлении, а в том, что ты позволяешь системе хранить неокруглённые под твоим контролем данные и использовать их для расчёта.
...
Рейтинг: 0 / 0
Округление при запросе к полю с плавающей точкой
    #38917179
Фотография Gallemar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryGallemar,
Я подозреваю, что "жёлтая программа" тут не при чём.
У тебя число как NUMERIC(15,3) объявлено, поди?
Ты прав. Хранится как
Код: plaintext
1.
2.
3.
CREATE DOMAIN T_MONEY AS
DOUBLE PRECISION
DEFAULT 0
NOT NULL;
но желтая программа оказалось не при чем. Для выгрузки в 1с из терминала сбора данных использовался xml, а так как торговая система не умеет импортировать его, приходилось xml конвертировать в xls скриптом на powershell, вот там и происходило округление.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Округление при запросе к полю с плавающей точкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]