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

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2019-05-23 11:50  Marydon  阅读(37033)  评论(4编辑  收藏  举报