0

Объясните, пожалуйста, что со мной не так, или почему результат вычислений столь странный? Здесь же даже нечего отрубать(округлять), если бы мы допустим хотели показать (1/3).
На сколько понимаю: 11.4+5.7 = 11.0+5.0 + 1.1 = 17.1
Так в школе ещё объясняли...

public class Test{
    public static void main(String[] args) {    
        System.out.println(11.4f+5.7f);
    }
}

Output:

17.099998
insolor
  • 49,104
Direct
  • 1,025

1 Answers1

1

Подобные ошибки связанны с внутренним двоичным (binary) представлением чисел. Подобно тому, как в десятичной системе нельзя точно представить результат деления 1/3, так и в двоичной системе невозможно точно представить 1/10.

Подробнее здесь

В двух словах, числа с плавающей точкой не подходят для арифметических вычислений. Если вы хотите иметь возможность выполнять арифметические действия над дробными числами, используйте класс BigDecimal

  • Аж стыдно, что я задал этот вопрос хаха. Большое спасибо! – Direct Sep 30 '17 at 15:52
  • @Direct, все приходит с опытом. Возможно этот вопрос скоро удалят. diraria нашел дубликат этого вопроса – Roman Danilov Sep 30 '17 at 15:54