可能重复:
为什么两个整数相除在 Java 中返回 0.0?
我有一些非常令人困惑的问题..我想计算一些东西,经过一些调试,我看到 java 计算这个算术:2 / 4 = 0.0但它应该是 0.5
2 & 4 存储在整数变量中,结果存储在双精度类型中。
我是否清楚地错过了什么?
可能重复:
为什么两个整数相除在 Java 中返回 0.0?
我有一些非常令人困惑的问题..我想计算一些东西,经过一些调试,我看到 java 计算这个算术:2 / 4 = 0.0但它应该是 0.5
2 & 4 存储在整数变量中,结果存储在双精度类型中。
我是否清楚地错过了什么?
这是因为整数除法(整数除法向 0 舍入)。将操作数之一转换为双精度类型。
例子:
double temp = (double)2/4
会给你正确的结果。
采用
myDouble = (double) integerWhoseValueIs2 / integerWhoseValueIs4
将它存储在 double 中的事实并没有改变两个整数相除得到整数的事实。当你储存它时,为时已晚。
来自Java 语言规范:
整数除法向 0 舍入。也就是说,在二进制数值提升(第 5.6.2 节)之后为整数的操作数 n 和 d 产生的商是一个整数值 q,其幅值尽可能大,同时满足 |d · q|。≤ |n|。
如果你不写强制转换double
,结果总是一个int
。
double a = (double) 2/4;