如何将Integer上的某些操作的结果存储到java中的不同数据类型中

G.D*_*G.D 0 java floating-point casting

所以我有两个整数,我通过添加它们然后将它们除以2来找到它们的中位数.我想存储它们的浮动结果.所以我在做 -

float res = (float) (num1 + num2) / 2;
Run Code Online (Sandbox Code Playgroud)

有时,对于非零输入,此表达式返回0.0.我认为问题是num1和num2范围可以变化到32位的全谱.因此,当两者都在高频谱中时,浮动抛出会因为无法存储结果而返回0.0并返回0.0.

我不想这样做,(float)num1/2 + (float)num2/2因为在这期间我可能会失去小数精度.

关于如何处理这种情况的任何指针.

Dur*_*dal 5

根据您的实际要求,浮动也可能无法解决问题.

要获得正确的结果,请尝试:

int num 1 = ...
int num 2 = ...
double avg = (((long) num1) + num2) / 2D;
Run Code Online (Sandbox Code Playgroud)

关键是要将int添加为long(将一个转换为long,另一个是自动转换,因为long + int会导致扩展转换).当两个整数的总和大于Integer.MAX_VALUE(或小于Integer.MIN_VALUE)时,这可以避免可能的整数溢出.

然后除以2,通过将2个文字后缀为双字面值,不需要显式强制转换.再次对于除法,这导致隐式加宽转换,其中long/double = double.