0

私はJavaに問題があり、例えば165600139 / 86400000 = 1.9を除算した場合、大きな長い型の数値を分割したいのですが、私のメソッドは丸めずに1を返します:/

public static long calcDaysBefore(Date date) {
    int MILISECONDS_IN_DAY = 24 * 60 * 60 * 1000;
    long days = 0;
    if (date != null) {
        long current = getCurrentDate().getTime() - date.getTime();
        days = current / MILISECONDS_IN_DAY;
    }
    return days;
}
4

3 に答える 3

2

それは切り捨てであり、することに似ています

days = Math.floor((double) current / MILISECONDS_IN_DAY);

半分を切り上げたい場合は、次のように書くことができます

days = (current + MILISECONDS_IN_DAY/2) / MILISECONDS_IN_DAY;

浮動小数点を使用すると、はるかに遅い以下を使用できます。

days = Math.round((double) current / MILISECONDS_IN_DAY);

切り上げたい場合は、行うことができます

days = (current + MILISECONDS_IN_DAY-1) / MILISECONDS_IN_DAY;

また

days = Math.ceil((double) current / MILISECONDS_IN_DAY);

ところで、ミリ秒には 2 つの l があります

于 2013-03-07T07:47:23.187 に答える
1

実際には結果は丸められます。いくつかの丸めモードがあります。 http://docs.oracle.com/javase/1.5.0/docs/api/java/math/RoundingMode.htmlを参照してください。あなたのケースでは、丸一日。使用できる最も近い long に丸めるために

long days = Math.round(current / 8640000.0);
于 2013-03-07T07:51:20.687 に答える
0

ダブルキャスト。

days = (double)current / (double)MILISECONDS_IN_DAY;
于 2013-03-07T07:47:12.413 に答える