很多次,我都在写一些东西,比如双t= 7/8*pi,然后才发现t等于0。为什么?因为到int的隐式转换。可以通过重新排列数字double t= 7*pi/8来获得正确的结果。现在,提名者是double,不会发生转换。(或双t= 7d/8*pi或7f或7.0或...)
问题是,犯错是很直接的!
我怎样才能防止它呢?把隐式转换完全转换成int有意义吗?我该怎么做?
发布于 2015-03-13 16:12:06
这不是一个优先级的问题吗?我所做的是使用7.0和/或8.0,因为我知道我想避免整数运算。一旦你习惯了,这似乎是很自然的。
发布于 2015-03-13 16:22:33
在Java语言中,可能会对此类构造发出警告。
ICAST:整数除法结果转换为双精度或浮点型(ICAST_IDIV_CAST_TO_DOUBLE)
这段代码将整数除法(例如,整型或长整型)运算的结果转换为双精度或浮点型。对整数进行除法会将结果截断为最接近零的整数值。结果被强制转换为double这一事实表明,应该保留这种精度。可能的意思是在执行除法之前将一个或两个操作数转换为双精度。下面是一个示例:
int x= 2;int y= 5;//错误:产生结果0.0 double value1 =x/ y;//正确:产生结果0.4 double value2 =x/ (double) y;
https://stackoverflow.com/questions/29027309
复制相似问题