1

私は最も近い10,000に切り捨てたい64ビットの長さを持っているので、簡単にやっています:

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

これは期待どおりに動作するように見えますが、整数型がどのように分割されるかの内部構造について 100% 理解していないため、これが期待どおりに機能しない状況が発生する可能性があることを少し心配しています。

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

4

2 に答える 2

4

はい、中間またはそれ以外の結果が を超えない限り、機能しlong.MaxValueます。

L定数について明示するには、最後に指定子を使用できます123456789L

このような単純な計算については、エッジ ケースを探してテストするMicrosoft ( http://research.microsoft.com/en-us/projects/pex/ ) の Pex をお勧めします。これは端正な例ですが、不明な点に基づいて多くのロジックを構築している場合、これは優れたツールです。

于 2011-11-09T11:38:41.487 に答える
1

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

ただし、エッジ ケースを含む、特定のユース ケース用にいくつかのテストを作成することをお勧めします。これで安心します。

于 2011-11-09T11:38:49.960 に答える