我知道无法做到, 但是因为我从其他地方得到了这些价值(...) 并假设:
我怎么能进行这样的转换?
谢谢!
答案 0 :(得分:4)
为什么你声称它无法完成?
如果您输入的值适合short
类型间隔,则会成功转换:
int i = 3444;
short s1 = (short) i;
float f = 3233.0f;
short s2 = (short) f;
这称为缩小原始转换,并在JLS Ch. 5.1.3中描述
答案 1 :(得分:3)
如果你知道你的int
(n
,比如说)在目标类型的可接受范围内,那么你只需投射:
short m = (short)n;
对float f
采用类似的方法。
short m = (short)f;
答案 2 :(得分:2)
为了理解这个操作,我们必须回到很久以前读过的一本书。这里应用的概念称为缩小转换,表示
“将有符号整数缩小转换为整数类型T只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关幅度的信息之外对于数值,这可能导致结果值的符号与输入值的符号不同。“
同样的概念适用于从double转换为float。此转换可能会丢失精度和范围,导致从非零双精度浮零,并且浮点无穷大转换为相同的有符号浮点数。