java 为什么 1 / 2 == 0 使用 double ?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/36902784/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 01:59:51  来源:igfitidea点击:

Why does 1 / 2 == 0 using double?

javadouble

提问by Benton Justice

I'm a high school student currently getting ready for a state academic meet(UIL). I have a problem and I've looked everywhere and can't seem to find an answer! Why does this print out 0.0?

我是一名高中生,目前正在准备参加州学术会议 (UIL)。我有一个问题,我到处找,似乎找不到答案!为什么这会打印出 0.0?

double d = 1/2;
System.out.println(d);

回答by Suresh Atta

It's because of the data type.

这是因为数据类型。

When you do 1/2that is integer division because two operands are integers, hence it resolves to zero (0.5 rounded down to zero).

当你这样做时1/2是整数除法,因为两个操作数是整数,因此它解析为零(0.5 向下舍入为零)。

If you convert any one of them to double, you'll get a double result.

如果您将其中任何一个转换为双精度,您将得到双精度结果。

double d = 1d/2;

or

或者

double d = 1/2.0;

回答by shmosel

1 and 2 are both integers, so 1 / 2 == 0. The result doesn't get converted to doubleuntil it's assigned to the variable, but by then it's too late. If you want to do float division, do 1.0 / 2.

1 和 2 都是整数,所以1 / 2 == 0。在将结果double分配给变量之前,不会将结果转换为,但为时已晚。如果要进行浮动除法,请执行1.0 / 2.

回答by Bohemian

It's because 1and 2are intvalues, so as per the java language spec, the result of an arithmetic operation on intoperands is also int. Any non-whole number part of the result is discarded - ie the decimal part is truncated, 0.5-> 0

这是因为12int值,所以根据 java 语言规范,对int操作数进行算术运算的结果也是int. 结果的任何非整数部分都被丢弃——即小数部分被截断,0.5->0

There is an automatic widening cast from intto doublewhen the value is assigned to d, but cast is done on the intresult, which is a whole number 0.

当将值分配给 时,会自动从intto扩大强制double转换d,但对int结果进行强制转换,结果是一个整数0

If "fix" the problem, make one of the operands doubleby adding a "d" to the numeric literal:

如果“修复”问题,请double通过向数字文字添加“d”来创建操作数之一:

double d = 1d/2;
System.out.println(d); // "0.5"

As per the language spec, when one of the operands of an arithmetic operation is double, the result is also double.

根据语言规范,当算术运算的操作数之一是 时double,结果也是double

回答by Krulig

Cause result of 1/2 = 0 and then result is parsing to double. You're using int instead of double. I think it should be ok:

导致 1/2 = 0 的结果,然后结果解析为双倍。您使用的是 int 而不是 double。我觉得应该没问题:

double d = 1/2.0;
System.out.println(d);

Sorry for weak english

抱歉英语不好