JAVA 中除法后小数精度问题
除法后总是归整数的问题...很是郁闷.比如3/5int结果为0,double结果为0.0....为什么???有什么办法能让除法后的小数保留下来?...
除法后总是归整数的问题...很是郁闷. 比如3/5 int 结果为 0, double 结果为0.0.... 为什么??? 有什么办法能让除法后的小数保留下来?
展开
6个回答
展开全部
你说的这个问题涉及到数字精度问题,在程序中,数字运算总是低精度的向高精度的自动转化。比如(int)/(float)就会得到你想要的小数数位,这是由数字在计算机中的运算方式决定的。如果你用3/5.0或者3.0/5,你就可以得到你想要的小数。
在计算机中,整型(int)和浮点(float,double)的表示形式各不相同,占用内存空间也不同,在运算时,为了得到正确的结果,就要进行对位,如果数据类型不一致,就要进行转化。在硬件层面上就是把占用内存少的整型向浮点转换,也就是为这个整型添加额外的字节参与运算,尽管这些字节中都是0,这是数字精度的问题。
现在是两个整形数,运算时,计算机认为不需要进行数据类型的转化,所以就得到你见到的结果。
在计算机中,整型(int)和浮点(float,double)的表示形式各不相同,占用内存空间也不同,在运算时,为了得到正确的结果,就要进行对位,如果数据类型不一致,就要进行转化。在硬件层面上就是把占用内存少的整型向浮点转换,也就是为这个整型添加额外的字节参与运算,尽管这些字节中都是0,这是数字精度的问题。
现在是两个整形数,运算时,计算机认为不需要进行数据类型的转化,所以就得到你见到的结果。
展开全部
因为int 是整数,整数除整数就是整数
double是小数。小数除小数才是小数
有两种方法,
1.是直接用小数除
如3.0/5.0
这样编译器会认为他们是double类型
2.是转换成double,或直接定义成double
如double a=3;
double b=5;
System.out.println(3/5);
还有什么不懂可以HI我
double是小数。小数除小数才是小数
有两种方法,
1.是直接用小数除
如3.0/5.0
这样编译器会认为他们是double类型
2.是转换成double,或直接定义成double
如double a=3;
double b=5;
System.out.println(3/5);
还有什么不懂可以HI我
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int 类型是按整除结果算,如果你两个数不能整除,那结果就会不对。
double、BigDecimal等如果你不设置精度的话,那它默认就会以你的两个数中精度大的那个来设置一个精度,而你这里两个都是整数,所以它把计算结果也按照整数进行操作。
double、BigDecimal等如果你不设置精度的话,那它默认就会以你的两个数中精度大的那个来设置一个精度,而你这里两个都是整数,所以它把计算结果也按照整数进行操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
恩 用double去运算 不然你本来的句子是 double d = 3/5; 3/5都是整数 计算起来是0 而你付值给double 就变成了0.0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用最简单的方法就是3.0/5这样就会得到你想要的结果了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询