2016-01-11 2 views
2

Я знаю, что это не может быть сделано, , но так как я получаю эти значения из другого (...) и предполагая, что:Java: от ИНТ на короткие и с поплавком на короткий

  • в int Я получаю:> 0 и < Short.Max_VALUE;
  • Поплавок я получаю:> 0 и < Short.Max_VALUE;

Как я мог выполнить такое преобразование?

Спасибо!

ответ

4

Почему вы утверждаете, что это не может быть сделано?

Если вы вводите значения укладываются в short интервал типа, это будет успешно преобразован:

int i = 3444; 
    short s1 = (short) i; 

    float f = 3233.0f; 
    short s2 = (short) f; 

Это называется Сужение примитив Преобразование и описано в JLS Ch. 5.1.3

3

Если вы знаете, что ваш int (n, скажем) находится в допустимых пределах типа назначения, то вы можете просто бросить его:

short m = (short)n;

и принять аналогичный подход для float f.

short m = (short)f;

2

Для того, чтобы понять это Мы должны вернуться к книге, которую я прочитал давно. Концепция, применяемая здесь называется Сужение Преобразование в котором говорится

«сужающее преобразование из целого числа к интегральному типу T просто отбрасывает все, кроме п низших битов порядка, где п число битов используется для представляют тип T. В дополнение к возможной потере информации о величине числового значения это может привести к тому, что знак результирующего значения будет отличаться от знака входного значения. »

Эта же концепция применяется к преобразованию из double в float. Это преобразование может потерять точность и дальность, что приведет к нулевому поплавку с нуля, а бесконечность float преобразуется в тот же подписанный float.

Смежные вопросы