2011-11-09 15 views
1

私は最寄り万に切り捨てしたいことを64ビット長の持っているので、私はシンプルをしています:整数型の分割 - 結果は予測可能ですか?

long myLong = 123456789 
long rounded = (myLong/10000) * 10000; //rounded = 123450000 

これは私が期待して何に見えますが、私は100%じゃないと整数型がどのように分割されるかについての内部については、これが期待どおりに機能しない状況があるかもしれないことに少し気になります。

これは非常に大きな数/エッジケースでも機能しますか?

答えて

4

はい、結果、中間またはそれ以外の場合は、long.MaxValueを超えない限り、動作します。

定数を明示するには、最後にL指定子を使用します。 123456789L

このような簡単な計算では、マイクロソフトのPex(http://research.microsoft.com/en-us/projects/pex/)(エッジケースを探してテストする)を提案できます。これはきれいにカットされた例ですが、あなたが確信していることに基づいて多くのロジックを構築していたなら、それは素晴らしいツールです。

1

はい、動作します。整数除算のセマンティクスは、あなたが期待するものを保証します。

ただし、エッジケースを含め、特定のユースケースについていくつかのテストを書くとよいでしょう。これはあなたを安心させます。

関連する問題