0
- 28.09.2019 - 12:22
| Код: Процедура Сформировать() Сообщить("--------------------------------------"); РасчетныйНДС = ОКР(59.85 * ?(0 = 0,20 / (100 + 20),0),2,1); РасчетныйНДС1= 59.85 * ?(0 = 0,20 / (100 + 20),0); РасчетныйНДС2 = ОКР(РасчетныйНДС1,2,1); Сообщить("Расчетный НДС 0: "+РасчетныйНДС); Сообщить("Расчетный НДС 1: "+РасчетныйНДС1); Сообщить("Расчетный НДС 2: "+РасчетныйНДС2); Сообщить("--------------------------------------"); РасчетныйНДС = ОКР(59.85 * 20 / (100 + 20),2,1); РасчетныйНДС1 = 59.85 * 20 / (100 + 20); РасчетныйНДС2 = ОКР(РасчетныйНДС1,2,1); Сообщить("Расчетный НДС 0: "+РасчетныйНДС); Сообщить("Расчетный НДС 1: "+РасчетныйНДС1); Сообщить("Расчетный НДС 2: "+РасчетныйНДС2); Коэф = 20/120; Сообщить("--------------------------------------"); РасчетныйНДС = ОКР(59.85 * Коэф,2,1); РасчетныйНДС1 = 59.85 * Коэф; РасчетныйНДС2 = ОКР(РасчетныйНДС1,2,1); Сообщить("Расчетный НДС 0: "+РасчетныйНДС); Сообщить("Расчетный НДС 1: "+РасчетныйНДС1); Сообщить("Расчетный НДС 2: "+РасчетныйНДС2); КонецПроцедуры -------------------------------------- Расчетный НДС 0: 9.97 Расчетный НДС 1: 9.975 Расчетный НДС 2: 9.97 -------------------------------------- Расчетный НДС 0: 9.98 Расчетный НДС 1: 9.975 Расчетный НДС 2: 9.98 -------------------------------------- Расчетный НДС 0: 9.97 Расчетный НДС 1: 9.975 Расчетный НДС 2: 9.97 -------------------------------------- | |
1
- 28.09.2019 - 13:36
|
(0) Тут дело не в округлении, а в формате хранения чисел в 1С. Во втором варианте сначала 59.85 умножается на 20, а потом делится на 120 - фактически, делится на 6 и результат точно равен 9.975, без десятитысячных, стотысячных и т.д. А первом и третьем вариантах сначала вычисляется значение 1/6, которое не может быть точно выражено десятичной дробью, и поэтому где-то в потрохах 1С неизбежно округляется. И вот результат этого округления, умноженный на 59.85, дает тоже округленный результат, уже "неправильный": Окр(59.85 * 20 / 120,2,1) = 9.98 Окр(20 / 120 * 59.85,2,1) = 9.97 Математически эти выражения одинаковы, но из-за "внутреннего" округления бесконечных дробей в компьютере (и даже 1С тут не при чем!)- имеем то, что имеем. | |
2
- 30.09.2019 - 15:10
| (1)Благодарю за пояснение | |
| Интернет-форум Краснодарского края и Краснодара |