Я кодировал некоторые расчеты (я скопировал ниже очень упрощенный пример того, что я сделал), например CASE2, и получил плохие результаты. Рефакторинг кода, как CASE1, и работал нормально. Я знаю, что в CASE 2 есть неявное приведение, но не уверен в полной причине. Кто-нибудь может объяснить мне, что именно происходит ниже?
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia / 2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6) / 2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0) / 2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6) / 2.0;
Я предполагаю, что / 2 в CASE2 приводит (5 + 6) к int и вызывает раунд деления до 5, затем снова приводит к удвоению и преобразуется в 5.0.
CASE3 и CASE 4 также исправляют проблему.