|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Уважаемые знатоки, Помогите пожалуйста может с идееи а может есть решение... Имеются такие данные: расписание студента в 1 день может иметь от 1 до 11 классов, разные вариации у разных студентов. каждый день студент может присутствовать или отсутствовать по ряду причин, например на одном классе присутствует персонально (П), на другом - онлаин (О) и также может отсутствовать по еще 4 причинам, например "без уважительнои", "с уважительнои" и еще парочку причин. Все возможные причины: ЕХ, Х, П, ПР, М, О они могут случиться в один день все вместе или только некоторые, но как минимум одна причина всегда есть. Мне надо посчитать на каждого студента, на каждыи день какая часть дня падает на какую причину до тысячнои. Я делю для каждои причины кол-во классов на общее кол-во классов в день для студента, чтоб наити какая часть дня относиться к причине и округляю до 3 Все получается хорошо кроме одного: ФАМИЛИЯ ДАТА ЕХ Х П ПР О Петров 01/01/2021 0.333 0.000 0.333 0.000 0.333 Это пример когда у студента было 3 причины по 2 класса на каждую и всего 6 классов в расписании, т.е. 2/6 для ЕХ, 2/6 для П и 2/6 для О Могут быть разные варианты 1/7, 1/9.... Проблема: если сейчас суммировать все части, то получу не 1.000 а 0.999. Непорядок. Есть ли волшебная функция, которая бы мне поделила бы все так, чтоб в итоге сумма была бы 1.000? За любые подсказки спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 21:49 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 21:55 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Ann2, А вообще, прочитай про как хранятся числа, ошибку округления ( на форуме не раз разбирали) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 22:11 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Вот так я считаю, Вот так я считаю, здесь получаю все поделенное до бесконечности. DECODE(NVL(state_att_code,'NULL'),'EX', 1,0)/COUNT (per.period_number) OVER (PARTITION BY TO_CHAR(sec.schoolid)||TO_CHAR(cc.studentid)||TO_CHAR(date_value,'YYYYMMDD')) TOTAL_EX, DECODE(NVL(state_att_code,'NULL'),'UX', 1,0)/COUNT (per.period_number) OVER (PARTITION BY TO_CHAR(sec.schoolid)||TO_CHAR(cc.studentid)||TO_CHAR(date_value,'YYYYMMDD')) TOTAL_UX, DECODE(NVL(state_att_code,'NULL'),'MH', 1,0)/COUNT (per.period_number) OVER (PARTITION BY TO_CHAR(sec.schoolid)||TO_CHAR(cc.studentid)||TO_CHAR(date_value,'YYYYMMDD')) TOTAL_MH, DECODE(NVL(state_att_code,'NULL'),'HP', 1,0)/COUNT (per.period_number) OVER (PARTITION BY TO_CHAR(sec.schoolid)||TO_CHAR(cc.studentid)||TO_CHAR(date_value,'YYYYMMDD')) TOTAL_HP, DECODE(NVL(state_att_code,'NULL'),'EL', 1,0)/COUNT (per.period_number) OVER (PARTITION BY TO_CHAR(sec.schoolid)||TO_CHAR(cc.studentid)||TO_CHAR(date_value,'YYYYMMDD')) TOTAL_EL, В следующем куске кода округляю и агрегирую по месяцу, т.е. из 0.3333333333333333333333333333333333333333333333333........................ 0.333 в итоге на год у меня не хватает нескольких малюсеньких фракции или наоборот - лишние select id, month,round(sum(total_ex),3), round(sum(total_ux),3)... from tab_above group by id, month Мне непонятно как использовать формат to_char в данном случае ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2021, 22:58 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Ann2 Вот так я считаю, Вот так я считаю, здесь получаю все поделенное до бесконечности. Код: plsql 1. 2. 3. 4. 5.
В следующем куске кода округляю и агрегирую по месяцу, т.е. из 0.3333333333333333333333333333333333333333333333333........................ 0.333 в итоге на год у меня не хватает нескольких малюсеньких фракции или наоборот - лишние Код: plsql 1. 2. 3.
Мне непонятно как использовать формат to_char в данном случае to_char - это просто формат отображения Само число, формата не имеет Вам достаточно выбрать для хранения тип number с нужной точностью Явно указываем с какой точностью использовать результат операции Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
p.s. Используйте теги для оформления кода ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2021, 00:12 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Ann2, 1/3 + 1/3 + 1 - 1/3 - 1/3 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 16:21 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Алекссс, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2021, 17:23 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Vadim Lejnin, Thank you so much! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2021, 23:36 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Ann2 чтоб наити какая часть дня относиться к причине и округляю до 3 Нужно понимать разницу между данными для показа и данными для расчётов. До 3 знаков имеет смысл округлять при показе. А вот для расчётов ничего округлять не надо. Это как этикетка товара и его штрих-код. Говорят об одном, но выглядят по-разному. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 03:48 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Правильный Вася До 3 знаков имеет смысл округлять при показе. А вот для расчётов ничего округлять не надо. зависит от задачи если не округлять, то "итого" будет звать ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 12:21 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Правильный Вася До 3 знаков имеет смысл округлять при показе. А вот для расчётов ничего округлять не надо. В области финансов и налогов данный тезис не особо применим. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 12:34 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
нужно принять правило сброса дельты на какой-то элемент (или группу элементов) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 13:34 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Ann2, andreymx нужно принять правило сброса дельты на какой-то элемент (или группу элементов) вот именно. каждую составляющую округляйте (вниз) до рубля (или грубее), а получившуюся в итоге дельту отправляйте, хотя бы и , детям африки ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 14:52 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
andrey_anonymous Правильный Вася До 3 знаков имеет смысл округлять при показе. А вот для расчётов ничего округлять не надо. В области финансов и налогов данный тезис не особо применим. Ложное мнение. Вот типичный пример. Стоимость кубометра газа 5.56151 руб. Если вы перед расчетами (финансовыми) округлите его до копеек (5.56), то при оплате простым потребителем 10 кубов (55.60) поставщик потеряет 1.51 копейки на "утруску/усушку". Пренебрежимо мало, казалось бы. А если таких потребителей десятки тысяч? 1.51*10000=15100 коп или 151 руб. А если не по 10 кубов? Как тогда сводить баланс? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2021, 22:29 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Правильный Вася andrey_anonymous пропущено... В области финансов и налогов данный тезис не особо применим. Ложное мнение. .... Как тогда сводить баланс? Округлять до копеек резезультат, а не расчетные коефициенты ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 08:46 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Поставщик, который покупает миллионы кубометров за миллионы рублей, разумеется получит "супердробные" цены. Только потребителя всё это никак не касается - цена в квитке обязана быть в (целых) рублях и копейках, а "дробность потребления" определяется возможностями (индивидуального) счётчика. Поэтому, да - исходные данные перемножаются как есть, сумма тоже округляется до (целых) рублей и копеек. А уж как при этом изменится финансовый результат (прибыль) поставщика ... "Проблемы шерифа индейцев не волнуют". P.S. Да, "это" работает в обе стороны. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 10:05 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Правильный Вася Стоимость кубометра газа 5.56151 руб. Стоимость услуги = округлить до копеек (объем*цена). Попытка избавиться от округления на этом этапе будет фатальна. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 10:33 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
andrey_anonymous Правильный Вася Стоимость кубометра газа 5.56151 руб. Стоимость услуги = округлить до копеек (объем*цена). Именно об этом я и говорю. Считать без округлений. А показывать уже округлённый итог. Так и у топикстартера - считать доли суток без округлений (равно как и хранить между подсчётами), а показывать сумму уже округлённой. Тогда не будет этих 0.999 вместо 1.000 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 22:26 |
|
нужно разделить единицу так , чтоб в итоге сумма частеи вернулась в 1.
|
|||
---|---|---|---|
#18+
Правильный Вася andrey_anonymous пропущено... Стоимость услуги = округлить до копеек (объем*цена). Именно об этом я и говорю. Считать без округлений ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2021, 22:27 |
|
|
start [/forum/topic.php?fid=52&fpage=16&tid=1880052]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 156ms |
0 / 0 |