java 的long转换double问题

long b = 12345;
double a = (double) b/1000;
double c = b/1000;
有什么区别?

long是高于double精度的一个基础变量类型,你在这里的强行转换会产生精度缺失的问题。

这个是我运行你的代码的结果,可以看出精度的缺失吧?

long是一个长整形变量,而double是双精度的浮点数(其实就是小数)

然后再这里b/1000就是等于12,因为b是长整形的,他的计算结果也会事长整形的

所以需要在计算前先将b强制装换为double型的,才可以保证精度不缺失

追问

谢谢您的回答,(double) b/1000是对b进行强制类型转换还是对 b/1000进行强制类型转换?

追答

是对b的

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-28
(double) b/1000; 这一步是把b先转化为Double型 然后进行计算

因为计算的类型中有double型 所以1000自动转化为double型
结果就是double型 12.345

b/1000; 这一步是long型/long型 得到的结果也是long型 就是12

然后转化为double型 就是12.0本回答被提问者和网友采纳
第2个回答  2012-08-09
long类型是有符号的64位整数,而double类型是大小为64位的精度是15~16位的小数,所以
double a = (double) b/1000;表示将输出结果强制转化为double类型:12.345,而double c=b/1000;这条语句的输出结果为long类型,结果为整数。
第3个回答  2012-08-09
是有区别的
double a = (double) b/1000;强制转化成double 输出结果:12.345
double c = b/1000;这里的类型是long 输出结果12.0追问

(double) b/1000是对b进行强制类型转换还是对 b/1000进行强制类型转换?

追答

对 b/1000进行强制类型转换

第4个回答  2018-02-27
转换时会丢失精度。加(double)就不会了
相似回答