Java 整数间的除法运算如何保留所有小数位?
1.情景展示
double d = 1/10;
System.out.println(d);
返回的结果居然是0.0!这是怎么回事儿?
2.原因分析
第一步:你会发现用运算结果也可以用int类型接收!
没有报错,也就是说:
在Java语言中,整数之间的除法运算,不管你的小数位有多少位,小数是几,统统舍弃,只返回整数位数字!
第二步:用double类型接收为什么也可以?
因为double类型的取值返回要大于int类型,所以属于向上类型转换,当然可以用比它大的容器接收啦(也就是可以直接进行转换 )。
你用float类型或long类型接收也没有问题!
第三步:为什么整数之间的除法运算,只返回整数位?
因为在Java中,由运算结果,由被运算数的最高数据类型决定,也就是说:整数之间的运算,数据类型都为int类型,所以,返回的结果也为int类型。
3.解决方案
掌握了这个原理,我们也就可以对症下药了!
如果我们想要返回完整的运算结果 ,我们就需要将其中一个的数据类型转换成double类型或者float类型,而不是只改变接收运算结果的数据类型!
方式一:将被除数转换成double类型
double d4 = 100d/ 235886 ; System.out.println(d4); //4.2393359504167265E-4
方式二:将除数转换成double类型
double d5 = 100 /235886d; System.out.println(d5); //4.2393359504167265E-4
方式三:将被除数转换成float类型
float f4 = 2358861f/ 235886 ; System.out.println(f4); //10.000004
方式四:将除数转换成float类型
float f5 = 2358861 /235886f; System.out.println(f5); //10.000004
连续运算
// 连续运算也是如此 int i4 = 1234567 / 1000 / 3600 ; System.out.println(i4); //0 double d = 1234567d/ 1000 / 3600 ; System.out.println(d); //0.34293527777777777
转换成long类型没用哦!
long l = 100L/ 235886 ; System.out.println(l); // 0
两个Long类型的数值进行除法运算
System.out.println( "long类型除法运算:" + 12345678910L/98765432110L); //0 System.out.println( "上升为double类型运算:" + 12345678910L/98765432110D); //0.12499999894953125 System.out.println( "上升为float类型运算:" + 12345678910L/98765432110F); //0.125
4.扩展
Java除法运算向上取整。
方式一:向上类型转换+Math.ceil()
// 方式一:向上类型转换 double d = 100D/ 235886 ; // 向上取整 int ceil2 = ( int )Math.ceil(d); System.out.println(ceil2); // 1
方式二:整数位+(有余数整数+1)
// 只保留整数位 int floor = 100 / 235886 ; // 余数 int remainder = 100 % 235886 ; // 向上取整 int ceil = floor + (remainder > 0 ? 1 : 0 ); System.out.println( "只保留整数位:" + floor + "," + (remainder > 0 ? "余数大于0" : "余数为0" ) + ",向上取整:" + ceil); // 只保留整数位:0,余数大于0,向上取整:1
5.js的整数间的运算,会返回实际运算结果哦!
console.log(1/10);//0.1
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/10911049.html