Ошибка, правка и тест
Модель находит минимальную причину расхождения, предлагает исправление и тест, который её ловит.
Причина в округлении: сумма каждой строки округляется до рубля, и копейки теряются. Считайте в копейках и округляйте только итог. Тест: три товара по 33,33 ₽ должны дать 99,99 ₽, а не 99 ₽.