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因为在这期间我可能会失去小数精度.
关于如何处理这种情况的任何指针.
根据您的实际要求,浮动也可能无法解决问题.
要获得正确的结果,请尝试:
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.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |