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

标签 java casting floating-point

所以我有两个整数,我通过将它们相加然后除以 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/

相关文章:

java - 无法绘制缓冲图像

java - Android - 测试 Activity 是否引发异常

c - 指针和类型转换

python - float 代表的差异

java - 从作为后台作业运行的 shell 脚本生成进程

kotlin - takeIf 函数内进行类型检查后进行智能转换

swift - 有没有更好的方法从字典(JSON 数据)中获取数字?

math - float 学有问题吗?

c - 正弦函数频率突然跳变

java程序统计以大写字母开头的单词个数