Error with division using double type in Java

2020-03-23 17:50发布

Okay. I have been bashing my head against the wall for like 2 hours now trying to figure out why in the world double answer = 364/365; is telling me that answer is 0. Or any other combination of double for that matter, its just truncating the decimal and I just don't know why.

5条回答
Viruses.
2楼-- · 2020-03-23 18:21

The reason is that the default type of integer literals in java is int and all the result of all int based arithemetic is type casted back to int. Hence though your answer is 0.997, when it is typecasted back it becomes 0:

(int)0.997  = 0

So you can do like this:

364.0/365.0

or

((float)364)/365
查看更多
时光不老,我们不散
3楼-- · 2020-03-23 18:27

You're taking an int type (364) and dividing by another int type (365) - the answer is going to be an int. This is then stored in a double type answer. You could do the following:

double answer = 364d / 365d;

More info here:

http://mindprod.com/jgloss/division.html

查看更多
姐就是有狂的资本
4楼-- · 2020-03-23 18:34

All the above answers are right, would just like to add that it is all about GIGO.

double answer = 364/365;

in above code double type implies only to answer variable and arithmetic expression has both operands of int type. So the output of the arithmetic expression is also int type which is then through auto up-casting to double type gives output 0.0, just like below examples:

double ans = 4.0/0;

the above code will give output Infinity as one of the operand is Floating-point number so through auto type-casting 0 is converted to 0.0 and the result is as per the Floating-point datatype.

whereas

double ans = 4/0;

will give java.lang.ArithmeticException: / by zero exception at runtime since both the operands are of datatype int and so the output is as per the Integer datatype irrespective of ans variable datatype being double.

查看更多
可以哭但决不认输i
5楼-- · 2020-03-23 18:42

You need do do double division. Right now Java is interpreting it as integer division and returning the truncated int.

What you need is:

double answer = 364 / 365.0;

or

double answer = 364 / (double) 365; 
查看更多
趁早两清
6楼-- · 2020-03-23 18:46

364/365 performs integer division (truncates the decimal).

Try double answer = 364.0/365; to force it to perform floating point division.

Something like:

double days_in_year = 365;
double answer = 364/days_in_year;

would work as well, since one of the operands isn't an integer.

查看更多
登录 后发表回答