【发布时间】:2012-12-03 15:17:52
【问题描述】:
可能重复:
Why does the division of two integers return 0.0 in Java?
我有一些非常令人困惑的问题.. 我想计算一些东西,经过一些调试,我看到 java 计算了这个算法: 2 / 4 = 0.0 但它应该是 0.5
2 & 4 存储在整数变量中 结果以双精度类型存储。
我是否清楚地错过了什么?
【问题讨论】:
可能重复:
Why does the division of two integers return 0.0 in Java?
我有一些非常令人困惑的问题.. 我想计算一些东西,经过一些调试,我看到 java 计算了这个算法: 2 / 4 = 0.0 但它应该是 0.5
2 & 4 存储在整数变量中 结果以双精度类型存储。
我是否清楚地错过了什么?
【问题讨论】:
这是因为整数除法(整数除法向 0 舍入)。将操作数之一强制转换为双精度类型。
例子:
double temp = (double)2/4
会给你正确的结果。
【讨论】:
使用
myDouble = (double) integerWhoseValueIs2 / integerWhoseValueIs4
将它存储在双精度中的事实并没有改变两个整数相除产生整数的事实。当你存储它时,为时已晚。
来自Java Language Specification:
整数除法向 0 舍入。也就是说,产生的商 二进制数值提升后的整数操作数 n 和 d (§5.6.2) 是一个整数值 q,其幅度尽可能大 同时满足|d·q| ≤ |n|。
【讨论】:
如果您不向double 写入强制转换,则结果始终是int。
double a = (double) 2/4;
【讨论】: