zoukankan      html  css  js  c++  java
  • 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

    写在最后

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

     相关推荐:

  • 相关阅读:
    指针、数组和结构体的一些思考
    Leetcode589.N-ary Tree Preorder TraversalN叉树的前序遍历
    Leetcode563.Binary Tree Tilt二叉树的坡度
    Leetcode559.Maximum Depth of N-ary TreeN叉树的最大深度
    Leetcode561.Array Partition I数组拆分1
    Leetcode551.Student Attendance Record I学生出勤记录1
    Leetcode543.Diameter of Binary Tree二叉树的直径
    Leetcode520Detect Capital检测大写字母
    Leetcode532.K-diff Pairs in an Array数组中的K-diff数对
    Leetcode496.Next Greater Element I下一个更大的元素1
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/10911049.html
Copyright © 2011-2022 走看看