|
|
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
вот уже который день боремся с такой проблемой - есьт отчет, который включает в себя статьи по доходу по расходу. При этом доход должен равняться расходу. и доход и расход состоит из статей одни их которых забиваются ручками, а другие являются суммой, н-р Код: plaintext 1. 2. 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| ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 15:55 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Сначала суммируй, потом округляй.... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:06 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
так я вроде так и делаю, только фигня получается.. 82701,181 + 5270,763 = 87971,944 после округления стало 82701,2 + 5270,8 и это <> 87971,9 или я чего то не пойму.. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:18 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
поставь тип данных денежный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:20 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
неа... не помогает.. тока буква р. появилась... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:26 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
где делаешь вычисления в sql запросе или VB ? тип данных поменять я предлагал не в поле отчета а в базовой таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 17:04 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
да, тип поля я в таблице и меняю.. вычисления в sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 17:21 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
автор 82701,181 + 5270,763 = 87971,944 после округления стало 82701,2 + 5270,8 и это <> 87971,9 По моему это логично! Ну ежели циферки такие, то что уж тут поделаешь??? Это не проблема математической логики, это проблема предоставления отчетности.... Я так думаю, что те кто эту отчетность принимают должны это дело понимать... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 17:48 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Если это еще интересно...\r \r /topic/49403 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2004, 23:57 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
севодни мене опять несет, посему прошу снисхождения. а тема, по моему скромному мнению, состоит из двух частей. 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) Так или иначе возникает "выравнивающий" алгоритм, обрабатывающий данные на некоторой вспомогательной таблице, предназначенной специально для выдачи этого отчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 01:28 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Victosha 1. (просто напоминаю) VBA сам твердо ( с большой буквы Т) округляет не так, как в "советской" школе учат А если открыть учебник? Или чудный справочник по элементарной математике Выгодского? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 01:40 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Данная ситуация у вас будет возникать только в одном случае далее постарайтесь внимательней (ввожу в курс аналитической арифметики) когда каждая цифра сотой части (82701,1 8 1 5270,7 6 3) превышает значение "4". Т.е. если хоть одна цифра (из этой же категории) не превышает "4", то у Вас проблем нет. в противном случае Вы сталкиваетесь с неисправимой договоренностью об округлении. В Вашем случае можно сделать следующее (правда это все яйца выеденного не стоит, но министерство есть министерство, они там седят чтобы сказку сделать былью ) В коде ВБА выдрать значения сотой части каждого числа (в данном случае "8" и "6"). Если одно из этих чисел <=4 то идти по класическому пути округления. Если иначе, то округлить класическим программным методом, только то число, у которого сотая часть максимальна, а другое не округлать, а просто отсечь значения сотой части. В Вашем случае 82701,181 = 82701, 2 5270,763 = 5 270,7. В случае сложения трех чисел алгоритм усложняется. Если вести досканальный анализ, то в данном методе кроется серьезная ошибка, но не математическая, а по линии налоговой инспекции. Хотя при большой статистике, как показывают многие апроксимакционные методы, эта ошибка будет сводится к нулю. Так что ребята Вы округляйте, но если министерство за кое чаго возьмут, то обычно валят на программистов и математиков. Но если это отчет чисто символический, то гарантирую работоспособность Если не разобрались и совсем прижмет, то пишите напишу функцию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 02:34 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Да, совсем забыл добавить не маловажную деталь Если сумма этих цифр (в данном случае "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. Если иначе, то округление классическим способом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 03:03 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Ничего себе, основы аналитической алгебры. #8-0\r Зря ты так сразу, про "алгебру".\r \r 2BJ \r Вот еще ссылочка:\r /topic/31080 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 08:01 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
А может пойти по пути отделения целой и дробной части, преобразования дробной до нужного кол-ва знаков (типа Left (часть,1) и воссоединения её обратно с целой... Stepler (щёлк-щёлк!!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 08:28 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
Другой аспект - арифметика Float нелинейна т.е. результат зависит от порядка действий и даже без округлений при длинных рассчетах дебет и кредит не сходятся из-за конечной(!) длинны мантиссы способов бухгалтера знают 3: - ручная правка выходного отчета для чего все 1с несут на борту работу с построенным выходным отчетом - принудительное ручное задание выходного значения через отдельное входное поле + флажок выдать корректированное - и главный ОТВЕТ ГЛАВБУХА "наша программа так считает" - ничего нельзя сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 08:47 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
авторА если открыть учебник? Или чудный справочник по элементарной математике Выгодского? ВИНОВАТ- нетути у мене учебников и буквочки я с трудом знакомые в них узнаю и про Выгодского ничего плохого сказать не желаю -) авторДанная ситуация у вас будет возникать только в одном случае далее постарайтесь внимательней (ввожу в курс аналитической арифметики) когда каждая цифра сотой части (82701,181 5270,763) превышает значение "4". интересно, человек после вчерашнего не проспался, или у него по жизни проблемы? PS1 если правильно помню, арифметически "округляет" Format() ( я уже сто лет форматом не округлял) PS2 что-то с темы как будто сдвинулись в не туда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 09:46 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
VictoshaВИНОВАТ- нетути у мене учебников и буквочки я с трудом знакомые в них узнаю и про Выгодского ничего плохого сказать не желаю Хорошо. Как-то года три назад зашел очередной спор об округлении в эхе fido7.ru.msaccess и полез я в дочкин учебник - и правила округления в точности соответствовали тем, что в VB. Подумал, вдруг это новомодные веяния, но древний справочник Выгодского меня в этом разуверил. Так что VB округляет в соответствии с нашими учебниками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 09:57 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
авторVB округляет в соответствии с нашими учебниками ОХЬ, блин, придется - видно, теперь уже обязательно, поползти в библиотеку... как бы не пришлось про Выгодского чего нехорошего написать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 10:07 |
|
||
|
как сделать логично?
|
|||
|---|---|---|---|
|
#18+
к vitosha а без намеков (оскарблений) и поразительных умозаключений нельзя? Какждый понял задачу по своему, у меня свое видение решений задачи и не надо делать умозаключений о человеке, которого не знаешь или уж тем более судить по себе. Как я понял применяемые методы не сработали и я всего лишь предложил метод. Хотя чё мне пред тобою оправдываться...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 14:53 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32475681&tid=1675444]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 502ms |

| 0 / 0 |
