Вход | Регистрация

  1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

Почему 1с округляет число 0.03472 как 0.03

Почему 1с округляет число 0.03472 как 0.03
Я
   Nesh
 
28.10.16 - 22:10
Почему число 0.03472 1с округляет Окр(0.03472,2) как 0.03? Так задумано, или это общеизвестный баг (фича)?
 
 
   Lama12
 
1 - 28.10.16 - 22:16
(0) Это школьная математика.
   Nesh
 
2 - 28.10.16 - 22:19
Почему тогда эксель это видит как 0.04?
   Euguln
 
3 - 28.10.16 - 22:20
(2) Неправда
   Лефмихалыч
 
4 - 28.10.16 - 22:22
Потому, что у Окр три параметра, а не два
   mehfk
 
5 - 28.10.16 - 22:22
Ну вот, еще однго одинэсника пора обратно в ассенизаторы списывать.
   Nesh
 
6 - 28.10.16 - 22:22
Правда, он не проставляет справа от разряда округления все числа 0-ми.
   Euguln
 
7 - 28.10.16 - 22:24
(6) Какие ваши доказательства?
   Лефмихалыч
 
8 - 28.10.16 - 22:25
хмм...
   Euguln
 
9 - 28.10.16 - 22:26
ОКРУГЛВВЕРХ(0,03472;2) = 0,04
ОКРУГЛ(0,03472;2) = 0,03
вот что выдает Excel
   Лефмихалыч
 
10 - 28.10.16 - 22:26
А и правда - почему?..
https://i.imgur.com/LTK4VqU.png
 
 Рекламное место пустует
   Nesh
 
11 - 28.10.16 - 22:28
(9) Я рассчитывал что в 1с Окр(;2) = ОКРУГЛВВЕРХ(;2) в екселе.
   Euguln
 
12 - 28.10.16 - 22:29
(11) Для таких целей специально придумали СП, чтобы не рассчитывать.
   Лефмихалыч
 
13 - 28.10.16 - 22:31
(12) с Окр15как20 все равно 0.03 возвращает
   mkalimulin
 
14 - 28.10.16 - 22:32
(11) Еще и не такое бывает. Например, остаток от деления в 1С один, в Excel другой, а в учебнике по математике третий.
   Euguln
 
15 - 28.10.16 - 22:33
(13) Опять же:
Определяет режим округления. Помимо системного перечисления допускается использование числового параметра: 0 - если при округлении 1.5 = 1; 1 - если при округлении 1.5 = 2.
т.е.

Окр(0.035,2) = 0.03 
Окр(0.035,2,РежимОкругления.Окр15как20 ) = 0.04
   Nesh
 
16 - 28.10.16 - 22:34
(12) Не надо включать слишком умного.

Вот из СП выдержка:

Округляет исходное число до нужной разрядности в соответствии с заданным режимом округления.

Все мы знаем, как местами в СП сухо описано...
   Euguln
 
17 - 28.10.16 - 22:35
В то время же как в Excel ОКРУГЛВВЕРХ округляет число до ближайшего большего по модулю.
   Nesh
 
18 - 28.10.16 - 22:35
(15) Это вообще о другом.
Окр(0,03472,2) = 0.03 
Окр(0,03472,2,РежимОкругления.Окр15как20 ) = 0.03
   Nesh
 
19 - 28.10.16 - 22:36
(17) Правильно. Почему в 1С не так округляет?
   Euguln
 
20 - 28.10.16 - 22:36
(16) Можно иногда дочитывать описание до конца, можно узнать много интересного.
   Euguln
 
21 - 28.10.16 - 22:37
(19) А почему должна?
   wertyu
 
22 - 28.10.16 - 22:43
(21) так пятница же )
   Лефмихалыч
 
23 - 28.10.16 - 23:17
(15) с 0.035 вопросов нет. Вопросы есть с 0.0347, которые, с точки зрения арифметики, должны округляться до 0.04, но фактически этого не происходит (10)
   Cyberhawk
 
24 - 28.10.16 - 23:38
(23) Потому что по правилам округления до сотых нужно отбросить все цифры после той, что вторая после запятой. А ты походу хочешь, чтобы 1С округлила сначала до тысячных, а затем этот промежуточный результат до сотых? А с хрена ли?
   Aleksey
 
25 - 28.10.16 - 23:38
(23) С точки зрения какой арифметики? Американской? Нас в, русских школах, учили что 0,0347 это 0,03. Если некоторых шпионов забугром учили по американским учебникам, то это не проблема 1С
   Cyberhawk
 
26 - 28.10.16 - 23:40
(25) Походу буржуйский Эксель округляет с самого конца и на выходе выдает цепочку округлений округлений округлений ...
   Лефмихалыч
 
27 - 28.10.16 - 23:44
(25) (24) странно. Меня в русской школе учили, что округлять надо, прибавляя единицу к старшему разряду, если младший >= 5, без всяких так отбрасываний чего бы то ни было. Чо жил, то зря...
   Cyberhawk
 
28 - 28.10.16 - 23:46
(27) Я это и имел в виду, просто не стал дописывать про условие, которое потом (после отбрасывания) надо проверить. Т.к. акцент хотел сделать именно на том, на какой разряд смотреть. На первый их отброшенных. Ну т.е. все как ты и сказал. И почему тогда по-твоему 0.0347 при округлении до сотых должно стать 0.04?
   NcSteel
 
29 - 28.10.16 - 23:46
(13) ты удивляешь... а почему должен 0.04?
   Cyberhawk
 
30 - 28.10.16 - 23:47
+(28) или ты про то, что округление нужно начинать с самой последней цифры по цепочке? Впервые слышу...
   Лефмихалыч
 
31 - 28.10.16 - 23:47
(30) меня так учили. Я всю жизнь так делаю.
   NcSteel
 
32 - 28.10.16 - 23:48
(19) А почему должно так? 1С округляет по правилам математики, а не Экселя...

Новое в программирование, а именно "Правило Экселя".
   Лефмихалыч
 
33 - 28.10.16 - 23:48
Я  - человек простой, округляю брутфорсом, с последней цифры
 
 
   Cyberhawk
 
34 - 28.10.16 - 23:50
(31) Ну ты же понимаешь, что это будет менее точный результат: у тебя в отброшенных как бы 47 из ста, на численное превосходство (перевешивание) это не тянет... Представь хотя бы качельку, где с одной стороны 53, с другой - 47...
   PR
 
35 - 28.10.16 - 23:50
Мдааа, даже сказать нечего. И эти люди автоматизируют страну.
   Cyberhawk
 
36 - 28.10.16 - 23:51
(35) А ты качельку 53 -- 47 уже представил? :о)
   Лефмихалыч
 
37 - 28.10.16 - 23:52
(34) да, мне всегда было непонятно такое ощутимое влияние этих мелких чисел на конечный результат, но усомниться как-то в голову не приходило. Тем более, что не так уж часто это нафиг надо было в жизни.

(35) нечего сказать - закрой рот и иди
   Cyberhawk
 
38 - 28.10.16 - 23:52
53__________47
--     ^    --
   PR
 
39 - 28.10.16 - 23:53
Не могут число округлить, в Эксель подсматривают, да еще _не_ понимают, почему так округляет!
   Cyberhawk
 
40 - 28.10.16 - 23:54
(39) А почему Эксель так округляет, есть идеи кроме (26)? Это ж дичь...
   Лефмихалыч
 
41 - 28.10.16 - 23:55
(40) потому, что он округляет брутфорсом - с самого конца
   PR
 
42 - 28.10.16 - 23:56
(40) Как так?
   PR
 
43 - 28.10.16 - 23:58
+(42) 0,035 до 0.04, если два знака? Или что?
   Cyberhawk
 
44 - 29.10.16 - 00:00
(43) Щас Эксель открою, а то тут проверять за товарищами надо ))
   Aleksey
 
45 - 29.10.16 - 00:02
(31) https://ru.wikipedia.org/wiki/Округление
О каком из методов идёт речь? Судя по твоему описанию у тебя какой то свой метод
   Cyberhawk
 
46 - 29.10.16 - 00:03
Все эксель нормально округляет:

ROUND(0,0347;2) = 0.03
ROUNDUP(0,0347;2) = 0.04 и для ясности, что за ROUNDUP:
ROUNDUP(0,0301;2) = 0.04 (т.е. последний оставляемый разряд всегда повышает на 1, если после него что-то еще есть)
   Cyberhawk
 
47 - 29.10.16 - 00:04
Короче автор использовал ОКРУГЛВВЕРХ в Экселе и почему-то посчитал, что в 1С должно быть так же
   Cyberhawk
 
48 - 29.10.16 - 00:05
Блин, в (11) уже все разжевали
   Cyberhawk
 
49 - 29.10.16 - 00:05
В (12) пример привели
 
 Рекламное место пустует
   PR
 
50 - 29.10.16 - 00:06
(46) Округли 0.035, будет 0.04, потому что https://support.office.com/ru-ru/article/Округление-числа-ba199237-27f0-4bc1-8185-5c2cdb4b45f6
"Округление числа 1,25 до одного знака после запятой. Поскольку округляемая часть — 0,05 или больше, число округляется вверх (результат: 1,3)".
Все нормально, просто Excel выбрал округление половины вверх.
С таким же успехом мог бы выбрать вниз.
Стакан наполовину полон. Или пуст. Для кого как.
   PR
 
51 - 29.10.16 - 00:08
(11) А я рассчитывал, что команда в 1С "Заказать пиццу" через секунду дает звонок курьера в дверь и че?
   Cyberhawk
 
52 - 29.10.16 - 00:10
(50) Мы не про Окр15как20 или как10 тут говорили, с 0.035 вопросов как раз не было. Вопросы были про (26), но это не подтвердилось
   Cyberhawk
 
53 - 29.10.16 - 00:11
(41) Не, смотри последний пример в (46). Так что с конца последовательно никто цепь округлений не делает :)
   Adilgeriy
 
54 - 29.10.16 - 01:13
окр(Окр(Окр(0,03472,4),3),2) = 0.04
   bse
 
55 - 29.10.16 - 10:18
(10)  наверное потому что этот параметр касается только *.5 и все что меньше его обрабатываются обычными правилами округления.
   bse
 
56 - 29.10.16 - 10:21
(55) блин... mista reader слоупок...
   ivan-china-bk
 
57 - 29.10.16 - 11:23
Капец, инженеры знаний.
В какой школе вас учили?

http://dic.academic.ru/dic.nsf/ruwiki/103905
...
Во всех вариантах в случае, когда (N+1)-й знак не равен 5 или последующие знаки не равны нулю, округление происходит по обычным правилам: 2,49 ? 2; 2,51 ? 3.


.То касается, что ексель чего-то там насчитал: то одно время ексель в формуле 2 + 2 * 2 выдавал результат 8

через много лет они это пофиксили, но сути это не меняет.
   ivan-china-bk
 
58 - 29.10.16 - 11:24
(57)  И да - миста такое го...но, что даже копипаст нормально вставить не может.
   orefkov
 
59 - 29.10.16 - 11:24
Как ни крути, но вообще-то  0.03472 ближе к 0.03, чем к 0.04
Так что думающие, что правильное округление до 0.04 - форменные идиоты.
   s_newbi
 
60 - 29.10.16 - 11:48
Норм пятничный топик
Учитель математики ТС походу икает
   Jump
 
61 - 29.10.16 - 11:52
Вроде все умные люди, но бывают темы которые показывают сколько тут альтернативно умного народу.
   Гость из Мариуполя
 
62 - 29.10.16 - 12:36
а можно переформулировать вопрос в сабже:
<<Как в 1С округлить число 0.03472 как 0.04>>
поясню:

в  Excel есть ДВЕ функции
- ROUND(
- ROUNDUP(
насчет первой все понятно - аналог в 1С имеется.
насчет второй - нет.

зы: округление всегда вверх - достаточно востребованная в бухгалтерии операция.
Например, при выписке меню-требования, например, в детском садике. Тот же молотый перчик, лавровый лист, да даже те же яйца, да любой продукт.
Недодача продуктов со склада на кухню чревата.
Коронная фраза "в зоопарке тигру недокладывают мяса" в интерпретации "в детсаду детям недокладывают сливочного масла" :)
для контролирующих органов как красная тряпка.
   orefkov
 
63 - 29.10.16 - 12:39
(62)
Для округления вверх надо сначала просто прибавить половину следующего разряда. Например, при округлении до сотых прибавить 5 тысячных.
Окр(0.03472 + 0.005, 2)
   dmpl
 
64 - 29.10.16 - 12:46
(33) Интересно, как по такому правилу надо округлять число пи и прочие иррациональные числа? У них количество знаков бесконечно.
   Гость из Мариуполя
 
65 - 29.10.16 - 12:48
(59) <<думающие, что правильное округление до 0.04 - форменные идиоты.>>
ну-ну.. не надо так категорично :)
посмотрел бы я, кто выглядел бы форменным идиотом после проверки контрольно-счетной палатой в детсаду.
Тот, кто округляет по правилам математики (и обворовывает детей, а это именно ТАК назовут в акте проверки),
или тот, кто выдает продуктов детям полностью и пусть и чуть с излишком.
:)


(63) Да это то понятно. И в общем случае для произвольного разряда придется написать свою функцию.
Просто  сама констатация факта, что в 1С изначально такой в общем то нужной функции нет. А как реализовать - это уже чисто технический вопрос.

ps: Бухгалтерия - это не триумф математики над разумом,
Бухгалтерия - это триумф разума над математикой.
   dmpl
 
66 - 29.10.16 - 12:52
(65) В обоих случаях будет наказание. В одном случае за обворовывание, в другом - за нецелевое расходование средств ;)
   Гость из Мариуполя
 
67 - 29.10.16 - 13:06
(66) во  втором случае как правило ничего не будет.
Ибо это прописано в нормативах. Округлять ВСЕГДА вверх до
разрешающей способности (с учетом погрешности) весов (например лист лавровый).
Или до целых штук (например яйца).
Или до единицы упаковки (например молоко, сок).

Нецелевое расходование - это вообще не из этой темы. Это расходование на другие цели. Например, вместо продуктов купили игрушки :)
Здесь же максимум - неэффективное расходование. И то с натяжкой.
   MrStomak
 
68 - 29.10.16 - 13:38
Читаю ветку с шевелящимися волосами - как такое возможно? Где вообще элементарное школьное образование? Что дальше? Будет топик с упомянутым примером 2+2*2 и про арифметические ошибки 1с?
   Гость из Мариуполя
 
69 - 29.10.16 - 14:57
(68) тю.
дано:
- в группе имеется 11 детей.
- каждому ребенку положено на полдник (на ужин) 200 гр сока (молока).
-  имеется сок (молоко) в тетраупаковках по 500 гр

Вопрос - "сколько вешать в граммах" (с)?
Сколько сока (молока) в  граммах (и в упаковках) должен списать бухгалтер, если вскрытую упаковку сока (молока) по санитарным нормам запрещается давать детям позднее 12 часов после вскрытия.

ps: Иными словами, в примере 4.4  округлится до 5.  Что, волосы все так же шевелятся?  :)

Бухгалтерия это не математика.
1С - это не Mathcad.
   MrStomak
 
70 - 29.10.16 - 15:23
(69) Да надоел ты уже с детьми своими.
Я автоматизировал кейтеринговую компанию, я знаю, когда нужно округлять 0.0300000001 как 0.04. Но это не округление, это приведение к другим единицам измерения.
Я не понимаю, как можно думать, что 0.0347 ближе к 0.04, чем к 0.03.
   orefkov
 
71 - 29.10.16 - 15:30
(65)
Ну, вообще-то это не округление тогда называется. В других языках имеется вообще три функции - round, floor, ceil.
   Aleksey
 
72 - 29.10.16 - 16:19
(69) Элементарно. Берем 10 пакетов молока, разливаем по стаканам (по 181 грамм), добавляем воды до 200 грам и 1 пакет (одинадцатый) забираем к себе домой. изи.
   Дарлок
 
73 - 29.10.16 - 16:21
Я смотрю, что на югах своя математика )) рыночная
   ivan-china-bk
 
74 - 29.10.16 - 16:35
Надо было автору сразу дать ссылку с понятным и простым для его уровня описанием
http://math-prosto.ru/?page=pages/rounding/rounding1.php
   ivan-china-bk
 
75 - 29.10.16 - 16:36
И некоторым товарищам тоже стоит (74) перечитать разок-другой (или прочитать это первый раз в жизни - никогда ведь не поздно).
   pavig
 
76 - 29.10.16 - 16:43
(61) Умело шифруются)
   kuzyara
 
77 - 29.10.16 - 16:52
в 1С вообще весело с округлением: 10/3*3 != 10
   kuzyara
 
78 - 29.10.16 - 16:55
Солидарен с (69) 

Бухгалтерия - это не математика.
   Aleksey
 
79 - 29.10.16 - 17:09
(77) Это в каком случае? Если каждый раз округлять результат?
   kuzyara
 
80 - 29.10.16 - 17:15
(79) А ты набери в отладчике
   MrStomak
 
81 - 29.10.16 - 17:24
(77) И что тут странного? Это следствие машинных вычислений, она не может сохранить в памяти результат 3.(3). 1с тут не при чем.
   MrStomak
 
82 - 29.10.16 - 17:29
(79) то есть ты не в курсе, что в нужно сначала умножать, а потом делить?
   dmpl
 
83 - 29.10.16 - 17:34
(82) О, очередные откровения пошли...
   MrStomak
 
84 - 29.10.16 - 17:37
(83)
Для тебя - возможно.
Абсолютно бесплатное, причем.
   Дарлок
 
85 - 29.10.16 - 17:38
(82) Надеюсь, это была шутка?
любой инжереный калькулятор при последовательном вычислении 10/3*3 дает 10. Это нормально.
кто не верит запускает в винде calc и пробует
   kuzyara
 
86 - 29.10.16 - 17:40
(81) назови мне хоть один скриптовый язык, который не умеет периодические дроби, кроме 1С?
   MrStomak
 
87 - 29.10.16 - 17:41
(85) Инженерный калькулятор реагирует на формулу и сам переставляет.
Программируешь ты не на инженерном калькуляторе.
Запусти sql managment studio и сделай select 10/3*3
   MrStomak
 
88 - 29.10.16 - 17:44
(86) T-SQL, PL/SQL?
   Adilgeriy
 
89 - 29.10.16 - 17:46
ЧтоОкгуляем = 0.0347
ЗнаковПослеЗапятой = 2
pow(основание, степень); 
?(окр(ЧтоОкгуляем,ЗнаковПослеЗапятой)=ЧтоОкгуляем, ЧтоОкгуляем, окр(ЧтоОкгуляем,ЗнаковПослеЗапятой)+1/pow(10,ЗнаковПослеЗапятой))
под рукой программы нет что бы проверить но это Оркгулвверх(ЧтоОкгуляем , ЗнаковПослеЗапятой ) из Excel вынеси её в фнукцию и пользуйся
   Aleksey
 
90 - 29.10.16 - 17:47
(80) Набирал, получилось 10.
   Дарлок
 
91 - 29.10.16 - 17:51
(87) ты случайно родом не с юга?
   Adilgeriy
 
92 - 29.10.16 - 17:51
(89) вру не совсем аналог на отрицательное значение ЗнаковПослеЗапятой не проверял скорее всего будет считать не правильно
   Aleksey
 
93 - 29.10.16 - 17:52
(84) Для меня тоже это откровение, ибо уможение и деление равнозначные операции


P.S. Чему вас в школе учат? Один округляет с конца, другой сначало умножает потом делит



В школе дается следующее правило, определяющее порядок выполнения действий в выражениях без скобок:

- действия выполняются по порядку слева направо,
- причем сначала выполняется умножение и деление, а затем – сложение и вычитание.
(с) http://www.cleverstudents.ru/expressions/order_of_operations.html
   Aleksey
 
94 - 29.10.16 - 17:54
(87) Какая формула? Действие без скобок выполняется слева направао
   Дарлок
 
95 - 29.10.16 - 17:56
(94) человек просто никогда не изучал математику чисел с плавающей запятой, вот ерунду и придумал. Но он же 1С-ик, чего с него взять?
   Либерал
 
96 - 29.10.16 - 18:05
ну вот, дожил - программисты(!) на сто постов спорят как округляются числа, за то церкви на каждом углу
   Дарлок
 
97 - 29.10.16 - 18:09
(96) 1с-ики не программисты
   kuzyara
 
98 - 29.10.16 - 18:11
(97) программист 1С - оксюморон (с)
   MrStomak
 
99 - 29.10.16 - 18:26
(93) Речь не про математику, речь про вычисления с помощью процессора. В 1с нужно сначала умножать, а потом делить. Потому что не каждый результат деления может быть сохранен в памяти без отбасывания не вместившихся разрядов. Пример тебе уже писали.
(91) ты уже сделал запрос в sql select 10/3*3, мудрый северянин? будешь бороться за математические принципы до последнего и принципиально верить в отсутствие для программы разницы в порядке вычислительных операций?
   Дарлок
 
100 - 29.10.16 - 18:33
(99) молодец. Ты смог поставить на свою домашнюю машину sql server. Возьми с полки пирожок, ведь ты настоящий 1с-ик.
Зы. Все таки с юга ))
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует