2011-11-09 13 views
1

我有一個64位長,我要向下舍到最近的10,000,所以我做一個簡單的:劃分整數類型 - 結果是否可預測?

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

這似乎做什麼,我希望,但我不是100%在整數類型如何分解的內部,我只是稍微擔心可能會出現這種情況,這種情況不能按預期的方式工作。

這仍然可以在非常大的數量/邊緣情況下工作嗎?

回答

4

是的,只要沒有結果,中間或其他,超過long.MaxValue,它就會起作用。

爲了明確您的常量,您可以在末尾使用L說明符,例如, 123456789L。對於像這樣的直接計算,我可以建議來自Microsoft的Pex(http://research.microsoft.com/en-us/projects/pex/),它尋找邊緣案例並對其進行測試。這是一個乾淨利落的例子,但是如果你基於你不確定的東西建立了很多邏輯,那麼這是一個很棒的工具。

1

是的,它會工作。整數除法的語義保證你所期望的。

但是,爲您的特定用例(包括邊緣案例)編寫一些測試可能會很好。這會讓你放心。