у вас есть целое подразделение там. 1/2
является 0
, не 0.5
.
Вы можете попробовать изменить выражение на Math.pow((1.0/(1+1)),1)
, чтобы заставить это быть делением с плавающей запятой.
Редактировать
Отдел в Java был разработан таким же образом, как это было в C и C++, который был до Java. Когда вы делаете деление с двумя выражениями типа int
, вы получаете результат типа int
. Это был выбор, который разработчики языка сделали, к лучшему или худшему, и мы застряли с ним сейчас. Но в основном это означает, что любой дробный результат от деления округляется вниз (строго говоря, к нулю). В этом случае 1/2
округляется до 0
.
Такая же вещь бывает long
.
Java Language Specification говорит
целочисленного деление раунды в стороне 0. То есть, фактор производится для операндов н и я, которые являются целыми числами после двоичного числового продвижения (§5.6.2) представляет собой целое значение д, величина которого насколько это возможно, удовлетворяя | d · q | ≤ | n |. Более того, q положительно, когда | n | ≥ | d | и n и d имеют один и тот же знак, но q отрицателен при | n | ≥ | d | и n и d имеют противоположные знаки.
Существует один частный случай, который не удовлетворяет этому правилу: если дивиденд является отрицательным целым наибольшей возможной величиной для своего типа, а делитель равен -1, то происходит целочисленное переполнение и результат равен дивиденду , Несмотря на переполнение, в этом случае не исключение. С другой стороны, если значение делителя в целочисленном делении равно 0, то генерируется исключение ArithmeticException.
Целочисленное подразделение, и почему вы поднимаете '0,5' до первого в любом случае? Просто напишите '0,5'. –
Эллиот, это большое упрощение реальной вещи. – user3466712