关于 Java 数学运算float
和int
数据类型的问题。
我必须计算两个日期之间的年差。
编码:
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));
由于Java中的日期差是以毫秒为单位计算的,因此我们必须在计算后做一些内务工作,并将接收到的结果从毫秒转换为年。
代码执行后,我在调试器中得到以下结果:
dateDiff = 8.4896639E11
age0 = 26
age1 = 577
age0
是正确的结果。
既然两个运算在数学age0
上age1
是相等的,为什么结果不同呢?(float / (a\*b\*c)) / d
为什么操作 « » 和 « »之间存在差异(float / (a\*b\*c\*d))
,其中a
, b
, c
,d
是int
。