Доброе время суток!
Возникла у меня в одном проекте из-за 1 копейки реальная проблема… Кажется, что такое копейка? Сегодня у нас и на гривну не много можно купить, а тут копейка! «К чему бы это он?», - спросите Вы. Объясню подробно.
В проекте, в разделе [Счета], используется двойное налогообложение продукта: Цена + НДС 20% + ННР 0,5% (или 0,1%). Попробуем математически рассчитать (округляем до второго знака после запятой):
Сумма с налогами: 300 грн
НДС 20%:
300*20/(100+20+0,5) = 49,79253112033195020746887966805
(49 грн 79 коп)
ННР 0,5%:
300*0,5/(100+20+0,5) = 1,2448132780082987551867219917012
(1 грн 24 коп)
Если мы воспользуемся стандартной функцией Math.Round() или System.Round() ( http://community.terrasoft.ua/node/1847 )
В поле ННР 0,5% увидим 1 грн 24 коп, что и стоило ожидать!
Но, внимание, если следовать расчетам бухгалтера (со ссылкой на 1С), то должно быть 1 грн 25 коп!!!
Вот эта одна копейка и испортила всю идиллию интересного проекта. Какая здесь логика?
1,2448 => 1,245 => 1,25
Прошу прощения, но тогда нужно начинать с бесконечности… А это, согласитесь, многовато.
Что бы угодить клиенту, пришлось наложить заплатку на расчет налогов:
Math.round(100* Math.round( TaxAmount *1000)/1000) / 100
М-да-а, вот такая история…
А у Вас бывали похожие казусы?
--
γνῶθι σεαυτόν