|
v7: Округление в ТИС | ☑ | ||
---|---|---|---|---|
0
Санта Клаус
22.06.20
✎
21:34
|
Ребята! Впервые заметил такой баг:
ТаблИтогов.СуммаБезНДС*КоэффСписания = 117.415 Окр(ТаблИтогов.СуммаБезНДС*КоэффСписания,2,1) = 117.41 ? Однако, если подставить в код (или в отладке) ЯВНО число Окр(117.415,2,1) = 117.42 как и должно быть по математике *********************** Такая конструкция все равно дает 117.41 ТекБезНДС = ТаблИтогов.СуммаБезНДС*КоэффСписания; РегПартии.СуммаБезНДС = Окр(ТекБезНДС,2,1); = 117.41 Что за ерунда? Спасибо |
|||
1
Cthulhu
22.06.20
✎
21:37
|
не ерунда.
ТаблИтогов.СуммаБезНДС*КоэффСписания = 117.414999999999999999 а не 117.415 |
|||
2
Санта Клаус
22.06.20
✎
21:39
|
(1) два раза округлять тогда можно, получается?
|
|||
3
Санта Клаус
22.06.20
✎
21:41
|
если на калькуляторе разделить сумму/кол, то 117.415 и получается, откуда хвост еще?
|
|||
4
Санта Клаус
22.06.20
✎
21:42
|
ладно, понял, а делать то что?)
|
|||
5
Злопчинский
22.06.20
✎
21:43
|
(3) причем сум/кол к (0)..?
|
|||
6
Злопчинский
22.06.20
✎
21:45
|
Смотреть из (0) в отладчике значения множителей с масимальной точностью, доступной в 1С, это вроде 22 знака после ЗПТ
|
|||
7
Санта Клаус
22.06.20
✎
21:48
|
(5) я понял сейчас, что с коэф в периоде связано, но почему он тогда мне обрезает до трех знаков
2583,13 * 0.04545454545454545455 = 117.4149999999999 а выдает 117.415 |
|||
8
Санта Клаус
22.06.20
✎
21:57
|
т.е когда произведение переменных ТаблИтогов.СуммаБезНДС*КоэффСписания - округляет до трех знаков,
если подставить хотя бы в один из множителей число, то не округляет до трез знаков - весь хвост выдает, что и надо, чтобы потом округлить. И где это зашито, в платформе что ли? |
|||
9
Злопчинский
22.06.20
✎
22:13
|
(8) могу ошибаться, но почитай правила определения точности результата.
Попробуй наоброт ради прикола КоэффСписания*ТаблИтогов.СуммаБезНДС И каковы параметры точности у ТаблИтогов.СуммаБезНДС |
|||
10
Злопчинский
22.06.20
✎
22:14
|
(7) "а выдает 117.415"
куда выдает? где выдает? результат чему-то присваивается - смотри принимающую точность. |
|||
11
Санта Клаус
22.06.20
✎
22:16
|
(10) в отладчике результат умножения
|
|||
12
Санта Клаус
22.06.20
✎
22:16
|
думаю сделать промежуточное округление до трех знако и потом до двух уже
|
|||
13
Санта Клаус
22.06.20
✎
22:18
|
(10) в отладчике не 117.4149999999999, а 117.415
|
|||
14
Санта Клаус
22.06.20
✎
22:23
|
//ресурсы
РегПартии.Количество = Окр(ТаблИтогов.Количество *КоэффСписания,5,1); РегПартии.СуммаУпр = Окр(ТаблИтогов.СуммаУпр *КоэффСписания,2,1); РегПартии.СуммаРуб = Окр(ТаблИтогов.СуммаРуб *КоэффСписания,2,1); РегПартии.СуммаПлат = Окр(ТаблИтогов.СуммаПлат *КоэффСписания,2,1); ТекСуммаБезНДС = Окр(ТаблИтогов.СуммаБезНДС*КоэффСписания,3,1); //+добавил = 117.415 РегПартии.СуммаБезНДС = Окр(ТекСуммаБезНДС,2,1); //+изменил = 117.42 - что и нужно вместо 117.41 |
|||
15
Санта Клаус
22.06.20
✎
22:26
|
не будет ли последствий? Вроде как на первый взгляд - нет
|
|||
16
Cthulhu
22.06.20
✎
23:06
|
(14): Окр - лишнее. запишется де-факто округленное согласно точности ресурса.
|
|||
17
Злопчинский
22.06.20
✎
23:35
|
(14) //+изменил = 117.42 - что и нужно вместо 117.41
то есть 117.41499999 ты решил округлить до 117.42? |
|||
18
Cthulhu
22.06.20
✎
23:50
|
// Санта, на вот тебе - наслаждайся... и делай выводы:
ЦелДлинаМаксимум=99; ДрДлинаМаксимум=77; // а можно и на форму Сообщить("*** Тестирование (макс.цел="+ЦелДлинаМаксимум+"/макс.др="+ДрДлинаМаксимум+":","i"); ЦелЧасть=""; Для ЦелЧастьДлина=1 По ЦелДлинаМаксимум Цикл ЦелЧасть=ЦелЧасть+Прав(""+ЦелЧастьДлина,1); ДрЧасть=""; Для ДрЧастьДлина=1 По ДрДлинаМаксимум-ЦелЧастьДлина Цикл ДрЧасть=ДрЧасть+Прав(""+ДрЧастьДлина,1); ЧислоСтрокой=ЦелЧасть+"."+ДрЧасть; ЧислоЧислом=Число(ЧислоСтрокой); Если ""+ЧислоЧислом+?(Прав(ДрЧасть,1)="0","0","")<>ЧислоСтрокой Тогда Сообщить(СимволТабуляции+"Число "+ЧислоСтрокой+" ("+(ЦелЧастьДлина +ДрЧастьДлина)+","+ДрЧастьДлина+") отличается от его представления " +ЧислоЧислом+?(Прав(ДрЧасть,1)="0","0","")+" ...","."); Прервать; КонецЕсли; КонецЦикла; КонецЦикла; |
|||
19
Aleksey
22.06.20
✎
23:50
|
(15) При определенных обстоятельствах при списание в 0 КоэффСписания может быть отличным от 1. Поэтому обычно сначала сравнивают на равенство, и только если показатели не равны используют КоэффСписания
|
|||
20
tgu82
23.06.20
✎
08:51
|
Округление это порой просто задалбывает
Особенно когда выписывается УПД в котором по товару несколько партий списывается с разными ГТД. И тогда начинается расхождение на 1 копейку. И пляска с бубном чтоб это поправить. Причем иногда все замечательно а иногда эта копейка вылезает. |
|||
21
Санта Клаус
23.06.20
✎
09:26
|
(20) в том то и дело, и править типовые механизмы округления как то не хочется и как кажется - это неправильно
|
|||
22
Санта Клаус
23.06.20
✎
09:30
|
(17) если вычислить цену партии через деление суммы на количество, оставшееся на данный момент, то результат 117.416;
если вычислять через КоэффСписания, как в глСписаниеПартийТМЦ , то результат 117.415 - в отладке и 117.41499999 - на калькуляторе |
|||
23
Санта Клаус
23.06.20
✎
09:32
|
+поэтому, вроде как, 117.416 округлить бы до 117.42 как показывает везде, кроме как в глСписаниеПартийТМЦ
|
|||
24
Злопчинский
23.06.20
✎
11:39
|
(23) глСписаниеПартийТМЦ
не надо ничего там исправлять... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |