Стандарт 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
Другие вопросы по тегам