Стандарт Java в результате применения двойного к Int
Скажи, что у меня есть следующее...
double d = 1.6;
int q = ( ( int ) d );
Будет ли это всегда отбрасывать только десятичную точку в соответствии со стандартом Java, или оно может округляться вверх или вниз в соответствии со стандартом (который существует более или менее)?
2 ответа
Да, это опустит десятичную точку. Это означает, что он будет округляться до нуля, поэтому он будет округляться, если он будет положительным, но он будет округляться, если он будет отрицательным.
Смотрите §5.1.3 в JLS:
В противном случае, если число с плавающей запятой не является бесконечностью, значение с плавающей запятой округляется до целочисленного значения V с округлением до нуля с использованием режима округления до нуля IEEE 754 ( §4.2.3).
Кастинг double
для int
всегда помещает значение в наибольшее целое число меньше его, но попробуйте это:
int q = (int) Math.round(d); // rounded instead of floored