双精度四舍五入到最接近的整数的问题
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.66666666666
和 33.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
与许多其他帖子不同,我想知道为什么我的代码会自动向下舍入到最接近的整数??
在此处查看代码
double sixes = 200/3;
double threes = 100/3;
System.out.println("Sixes: " + sixes + "\nThrees: " + threes);
在此处查看输出:
六人制:66.0
三分:33.0
这些应该分别是 66.66666666666
和 33.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