2

私は理解できないような小さな問題を抱えています。2つのカレンダーからミリ秒単位で時間を取得し、それらを減算し、結果を除算して2つのカレンダーの日数の差を取得しています。繰り返し実行すると、この計算は小さな小数、通常は.0000001だけずれることがあります。これを改善する方法はありますか?注:これらの数値はしばらくすると大きくなるため、長い値として保持する必要があります。

コードは次のとおりです。

まず、カレンダーの日付の値をミリ秒単位で取得します...

    final long calendarOne = datePickerCalendar
             .getTimeInMillis();

    final long calendarTwo = actualCalendar
             .getTimeInMillis();

次に、2つの数値を減算します...

    if(calendarOne > calendarTwo)
    {

         long differenceInMilliseconds = (long)
             (calendarOne) - (calendarTwo);

    }

DifferenceInMillisecondsの値は、2つのカレンダー間で変更がなく、次のように変化します。

正しい番号:63417600000

間違った番号:63417599999

間違った番号:63417599997

数学はほとんどの場合正しい数を考え出しますが、なぜ矛盾があるのか​​理解できません。私は数学で何か間違ったことをしていますか?または、ロングを丸める方法はありますか?

助けてくれてありがとう

4

2 に答える 2

3

数学はほとんどの場合正しい数を考え出しますが、なぜ矛盾があるのか​​理解できません。私は数学で何か間違ったことをしていますか?または、ロングを丸める方法はありますか?

いいえ、いいえ。ある整数を別の整数から減算する場合、丸めは行われません。

考えられる原因は、2つのカレンダーオブジェクトが作成されている方法にあります。彼らはシステムクロックから初期値を取得しているのではないかと思います。場合によっては、それぞれの作成時間の間に、ミリ秒レベルの時間値で目立つほどの十分な経過時間があります。

于 2013-01-26T04:30:44.633 に答える
1

を作成actualCalendarした後、実行actualCalendar.set( MILLISECOND, 0 )し、同じことdatePickerCalendarを実行します。これにより、2つの間の差が少なくとも1秒になるようになります。おそらく2つのカレンダーの作成間の遅延が原因であるため、問題を修正する必要があります。

于 2013-01-26T05:05:14.873 に答える