我有以下程序
import java.util.*;
import java.text.*;
import org.joda.time.*;
public class ScopeControl {
public static Interval getInterval() {
DateTime currDate = new DateTime(2008, 4, 4, 15, 30, 0, 0);
DateTime epochDate = new DateTime(2000, 1, 1, 12, 0, 0, 0);
Interval interval = new Interval(epochDate, currDate);
return interval;
}
public static void main(String[] args) {
double daysBtween = getInterval().toDurationMillis()/1000/60/60/24;
StdOut.println(daysBtween);
}
}
我得到了输出: 3016.0
但我正在寻找的是: 3016.1458333333
我做错了什么?
答案 0 :(得分:0)
toDurationMillis返回一个long,每个分区都声明为int。因此,Java会将int转换为long并执行返回long的分区。结果将结果转换为double。要告诉Java使用双精度执行表达式,请将表达式的任何组件声明为double。例如:
double daysBtween = getInterval().toDurationMillis()/1000d/60d/60d/24d;