This question already has an answer here:

Question about ** Java** math operations on

**and**

*float***datatypes.**

*int*I have to calculate the date difference in years between two dates. The code:

```
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Object date = obj.getInfoItem().getInfoValue();
Date today = new Date();
Date birthDate = null;
float dateDiff;
int age0, age1;
try {
// unify the date format
birthDate = format.parse(date.toString());
today = format.parse(format.format(today));
} catch (ParseException e) {
e.printStackTrace();
}
// calculate the age in years with round
dateDiff = today.getTime() - birthDate.getTime();
age0 = (int)((dateDiff / (24 * 60 * 60 * 1000)) / 365);
age1 = (int)(dateDiff / (365 * 24 * 60 * 60 * 1000));
```

Since the date difference in Java is calculated in milliseconds, thus we have to do some housekeeping work after calculation and convert received result from milliseconds to years.

After code execution, I got the following results in debugger:

```
dateDiff = 8.4896639E11
age0 = 26
age1 = 577
```

** age0** is a correct result.

Since both operations on ** age0** and

**are mathematically equal, why outcomes are different? Why there is a difference between operations «**

*age1***» and «**

*(float / (a*b*c)) / d***», where**

*(float / (a*b*c*d))***,**

*a***,**

*b***,**

*c***are**

*d***.**

*int*