双精度四舍五入到最接近的整数的问题

Issue with doubles rounding down to nearest whole

与许多其他帖子不同,我想知道为什么我的代码会自动向下舍入到最接近的整数??

在此处查看代码

    double sixes = 200/3;
    double threes = 100/3;

    System.out.println("Sixes: " + sixes + "\nThrees: " + threes);

在此处查看输出:

六人制:66.0

三分:33.0

这些应该分别是 66.6666666666633.3333333333 但我不确定为什么要将它们四舍五入?

算法取决于最复杂的参数。您计算整数,因此使用生成整数作为输出的算法。最后,该整数被隐式转换为 double 以适合您的变量。

尝试double sixes = 200.0/3.0;验证。

问题是你在数字后面加小数点吗,不加就是double除以int而不是double除以double,这里举例:

整数除以 :

   double sixes = 200/3;
    double threes = 100/3;

    System.out.println("Sixes: " + sixes + "\nThrees: " + threes);

输出:

Sixes: 66.0
Threes: 33.0

双倍除以双倍:

   double sixes = 200/3.0;
    double threes = 100/3.0;

    System.out.println("Sixes: " + sixes + "\nThrees: " + threes);

输出:

Sixes: 66.66666666666667
Threes: 33.333333333333336