所以我有两个整数,我通过将它们相加然后除以 2 来找到它们的中位数。我想存储它们的 float 结果。所以我正在做 -
float res = (float) (num1 + num2) / 2;
有时,此表达式对于非零输入返回 0.0。我认为问题在于 num1 和 num2 范围可能会变化到 32 位的全范围。因此,当两者都在高光谱中时, float 转换会中断,因为它无法存储结果并返回 0.0。
我不想执行(float)num1/2 + (float)num2/2
,因为在此过程中我可能会失去小数精度。
有关如何处理这种情况的任何指示。
最佳答案
根据您的实际要求, float 也可能无法解决问题。
要获得正确的结果,请尝试以下操作:
int num 1 = ...
int num 2 = ...
double avg = (((long) num1) + num2) / 2D;
要点是将 int 添加为 long(将一个强制转换为 long,另一个自动强制转换,因为 long + int 会导致扩大转换)。当两个整数之和大于 Integer.MAX_VALUE(或小于 Integer.MIN_VALUE)时,这可以避免可能的整数溢出。
然后除以二,通过将 2 文字作为双文字后缀,不需要显式转换。同样,对于除法,这会导致隐式加宽转换,其中 long/double = double。
关于java - java中如何将Integer的某些操作的结果存储到不同的数据类型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44315100/