ミリ秒単位の送信日と宛先の日数に基づいて、ミリ秒単位の返品日を計算しようとしています。これを行うには、送信日にdaysIn * 86400000を追加します。ここで、86400000はミリ秒単位の日を表します。
long newReturn = newOut + (daysIn * 86400000);
この式の2番目の部分は機能していないようです。daysInを30に設定すると、daysIn * 86400000は明らかに-1702967296になります。私は2592000000を期待しているので、これは明らかに私のnewReturn値が間違っている原因になります。
値が小さい場合、たとえば2の場合は正常に機能するため、この問題は理解できません。
変数のタイプは次のとおりです。
long newReturn;
long newOut;
int daysIn;
タイプに問題があるのではないかと思いましたが、longは多数を処理でき、daysInが24以下であればすべて機能します。エラーの原因や修正方法に関するアイデアはありますか?何でもいただければ幸いです。
重複としてマークされた質問は、「操作によってオーバーフローが発生するかどうかを確認する方法」に関するものでしたが、これはオーバーフローの解決には役立ちません。私はそのようにこの質問を再開しました。
daysIn
は、int
で86400000
あるint
ためdaysIn * 86400000
、int(の種類)であり、オーバーフローします。
解決策は、を作成daysIn
するか、:すなわち。としてlong
指定することです。86400000
long
86400000L
long newReturn = newOut + (daysIn * 86400000L); // should work as intended
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加