powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как сделать логично?
21 сообщений из 21, страница 1 из 1
как сделать логично?
    #32467326
BJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот уже который день боремся с такой проблемой - есьт отчет, который включает в себя статьи по доходу по расходу. При этом доход должен равняться расходу.
и доход и расход состоит из статей одни их которых забиваются ручками, а другие являются суммой, н-р
Код: plaintext
1.
2.
3.
4.
статья1 - ручками (р)
статья2 - (р)
статья3 - статья1+статья2
статья4 - (р)
статья5 - статья3+статья4

все бы ничего, но проклятое министерство издало указ приносить отчеты в тыс. руб. с одним знаком после запятой т.е. 125,7 тыс.руб
когда это все суммируется то получаются округления, из-за которых в отчете неверные цифры. н-р было
ст1 82701,181
ст2 5270,763
ст3 (ст1+ст2) 87971,944 стало

ст1 82701,2
ст2 5270,8
ст3 (ст1+ст2) <> 87971,9 !!!
КАК МОЖНО ИЗБАВИТЬСЯ ОТ ЭТОГО???? если вообще можно.... 8|
...
Рейтинг: 0 / 0
как сделать логично?
    #32467348
Фотография Polev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала суммируй, потом округляй.... :)
...
Рейтинг: 0 / 0
как сделать логично?
    #32467378
BJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так я вроде так и делаю, только фигня получается..

82701,181 + 5270,763 = 87971,944
после округления стало
82701,2 + 5270,8 и это <> 87971,9

или я чего то не пойму.. :(
...
Рейтинг: 0 / 0
как сделать логично?
    #32467387
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставь тип данных денежный
...
Рейтинг: 0 / 0
как сделать логично?
    #32467403
BJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неа... не помогает.. тока буква р. появилась...
...
Рейтинг: 0 / 0
как сделать логично?
    #32467488
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где делаешь вычисления в sql запросе или VB ?

тип данных поменять я предлагал не в поле отчета а в базовой таблице
...
Рейтинг: 0 / 0
как сделать логично?
    #32467529
enot123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, тип поля я в таблице и меняю..
вычисления в sql
...
Рейтинг: 0 / 0
как сделать логично?
    #32467580
Фотография Polev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор 82701,181 + 5270,763 = 87971,944
после округления стало
82701,2 + 5270,8 и это <> 87971,9

По моему это логично!
Ну ежели циферки такие, то что уж тут поделаешь???
Это не проблема математической логики, это проблема предоставления отчетности....
Я так думаю, что те кто эту отчетность принимают должны это дело понимать... :)
...
Рейтинг: 0 / 0
как сделать логично?
    #32474600
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если это еще интересно...\r
\r
/topic/49403
...
Рейтинг: 0 / 0
как сделать логично?
    #32474640
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
севодни мене опять несет, посему прошу снисхождения.

а тема, по моему скромному мнению, состоит из двух частей.

1. (просто напоминаю) VBA сам твердо ( с большой буквы Т) округляет не так, как в "советской" школе учат "арифметическому" округлению. А именно
round(12.235,2)= 12.24
round(12.245,2)= 12.24
round(12.205,2)= 12.2 т.е. 0 - "четная" цифра
(Cint,Clng работают аналогично, "дурит" только CCur)
сие округление означает "несмещенность оценки" на длинном ряде чисел (половина 5-ок округлится вниз, половина вверх в предположении равновероятного появления цифр 0-9 в позиции округления). То есть методы от разработчиков VB(A) стремятся к тому, чтобы ROUND(SUM) был статистически равен SUM(ROUND). (Однако "стремление" не означает гарантию, особенно на рядах чисел длиной 2. Также надо понимать, что арифметическое округление этого тоже (тем более) не гарантирует). Устоявшегося наименования для такого округления в русском языке не знаю, а называть его так, как американцы называют - значит сильно приукрашивать действительность -)
знать об этом надо, хотя бы для того, чтобы понимать, почему "не сходится", когда кто-то возьмется проверять округление ручками.



2 ) автордоход должен равняться расходу
это означает, что в действительности на наборе статей выбирается не меньше двух подсумм, которые, хотя и равны по вероятности, в конкретности могут разойтись на некоторое к-во единиц округления. В этом месте как раз возникает то, на что указывает Владимир Саныч своей ссылкой.


мораль 1 с величинами типа статья3 = статья1+статья2, входящими в итоговый отчет нужно определяться ПОСЛЕ того, как определились с округлением статья1 и статья2

мораль 2 в зависимости от наложенных дополнительных требований на "целостность" данных в отчете, в анализе может может потребоваться как ОКРУГЛ_статья3=ОКРУГЛ(статья1)+ОКРУГЛ(статья2) так и ОКРУГЛ(статья3)=ОКРУГЛ(статья1+статья2)

Так или иначе возникает "выравнивающий" алгоритм, обрабатывающий данные на некоторой вспомогательной таблице, предназначенной специально для выдачи этого отчета.
...
Рейтинг: 0 / 0
как сделать логично?
    #32474642
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victosha 1. (просто напоминаю) VBA сам твердо ( с большой буквы Т) округляет не так, как в "советской" школе учат
А если открыть учебник? Или чудный справочник по элементарной математике Выгодского?
...
Рейтинг: 0 / 0
как сделать логично?
    #32474654
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данная ситуация у вас будет возникать только в одном случае
далее постарайтесь внимательней (ввожу в курс аналитической арифметики)
когда каждая цифра сотой части (82701,1 8 1 5270,7 6 3) превышает значение "4". Т.е. если хоть одна цифра (из этой же категории) не превышает "4", то у Вас проблем нет. в противном случае Вы сталкиваетесь с неисправимой договоренностью об округлении.

В Вашем случае можно сделать следующее (правда это все яйца выеденного не стоит, но министерство есть министерство, они там седят чтобы сказку сделать былью )

В коде ВБА выдрать значения сотой части каждого числа (в данном случае "8" и "6"). Если одно из этих чисел <=4 то идти по класическому пути округления. Если иначе, то округлить класическим программным методом, только то число, у которого сотая часть максимальна, а другое не округлать, а просто отсечь значения сотой части. В Вашем случае 82701,181 = 82701, 2
5270,763 = 5 270,7.
В случае сложения трех чисел алгоритм усложняется.
Если вести досканальный анализ, то в данном методе кроется серьезная ошибка, но не математическая, а по линии налоговой инспекции. Хотя при большой статистике, как показывают многие апроксимакционные методы, эта ошибка будет сводится к нулю.
Так что ребята Вы округляйте, но если министерство за кое чаго возьмут, то обычно валят на программистов и математиков. Но если это отчет чисто символический, то гарантирую работоспособность
Если не разобрались и совсем прижмет, то пишите напишу функцию...
...
Рейтинг: 0 / 0
как сделать логично?
    #32474657
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, совсем забыл добавить не маловажную деталь
Если сумма этих цифр (в данном случае "8" и "6") превышает значение 14, то к десятой части нужно прибавить 1
Т.е. если бы у тебя было числа 0.18 и 0.76 (сумма 8+6=14) то ( как описано в предыдущем письме)
Если бы было 0.18 и 0.77, то в жизни было бы так 0.18+0.77=0.95 округление = 1.00. Т.е. размышляем так: значения сотой части каждого числа "8" и "7". Оба числа превышают "4", значить надо что-то делать. Берем максимальное значение ("8") и это число округляем класически 0.18 = 0.2

если я еще окончательно не запутал Вас то делаю краткое резюмеее:

1. Если все цифры сотой части больше "4" и их сумма >14 то нужно округлять классическим методом
2. Если все цифры сотой части больше "4". но их сумма <14, то нужно округлять следующем образом: классическое округление для числа, чья сотая часть больше и отсечение сотой части второго числа.
3. Если иначе, то округление классическим способом
...
Рейтинг: 0 / 0
как сделать логично?
    #32474723
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего себе, основы аналитической алгебры. #8-0\r
Зря ты так сразу, про "алгебру".\r
\r
2BJ \r
Вот еще ссылочка:\r
/topic/31080
...
Рейтинг: 0 / 0
как сделать логично?
    #32474752
Фотография Stepler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может пойти по пути отделения целой и дробной части, преобразования дробной до нужного кол-ва знаков (типа Left (часть,1) и воссоединения её обратно с целой...

Stepler (щёлк-щёлк!!)
...
Рейтинг: 0 / 0
как сделать логично?
    #32474768
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другой аспект - арифметика Float нелинейна т.е. результат зависит от порядка действий и даже без округлений при длинных рассчетах дебет и кредит не сходятся из-за конечной(!) длинны мантиссы


способов бухгалтера знают 3:

- ручная правка выходного отчета для чего все 1с несут на борту работу с построенным выходным отчетом
- принудительное ручное задание выходного значения через отдельное входное поле + флажок выдать корректированное
- и главный ОТВЕТ ГЛАВБУХА "наша программа так считает" - ничего нельзя сделать
...
Рейтинг: 0 / 0
как сделать логично?
    #32474857
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА если открыть учебник? Или чудный справочник по элементарной математике Выгодского?
ВИНОВАТ- нетути у мене учебников и буквочки я с трудом знакомые в них узнаю и про Выгодского ничего плохого сказать не желаю
-)

авторДанная ситуация у вас будет возникать только в одном случае
далее постарайтесь внимательней (ввожу в курс аналитической арифметики)
когда каждая цифра сотой части (82701,181 5270,763) превышает значение "4".
интересно, человек после вчерашнего не проспался, или у него по жизни проблемы?

PS1 если правильно помню, арифметически "округляет" Format() ( я уже сто лет форматом не округлял)

PS2 что-то с темы как будто сдвинулись в не туда...
...
Рейтинг: 0 / 0
как сделать логично?
    #32474876
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VictoshaВИНОВАТ- нетути у мене учебников и буквочки я с трудом знакомые в них узнаю и про Выгодского ничего плохого сказать не желаю
Хорошо. Как-то года три назад зашел очередной спор об округлении в эхе fido7.ru.msaccess и полез я в дочкин учебник - и правила округления в точности соответствовали тем, что в VB. Подумал, вдруг это новомодные веяния, но древний справочник Выгодского меня в этом разуверил. Так что VB округляет в соответствии с нашими учебниками
...
Рейтинг: 0 / 0
как сделать логично?
    #32474892
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторVB округляет в соответствии с нашими учебниками
ОХЬ,
блин, придется - видно, теперь уже обязательно, поползти в библиотеку...
как бы не пришлось про Выгодского чего нехорошего написать...
...
Рейтинг: 0 / 0
как сделать логично?
    #32475645
Ukraina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к vitosha
а без намеков (оскарблений) и поразительных умозаключений нельзя?
Какждый понял задачу по своему, у меня свое видение решений задачи и не надо делать умозаключений о человеке, которого не знаешь или уж тем более судить по себе.
Как я понял применяемые методы не сработали и я всего лишь предложил метод. Хотя чё мне пред тобою оправдываться...?
...
Рейтинг: 0 / 0
как сделать логично?
    #32475681
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к Ukraina
1. Оправлываться предо мною вовсе ни к чему.
2. Хорошо, что хоть кто-то понял задачу, пусть и по своему.
3. Постараюсь впредь "не обижать". Прости друх, это видно, я не проспался.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / как сделать логично?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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