我有一個64位長,我要向下舍到最近的10,000,所以我做一個簡單的:劃分整數類型 - 結果是否可預測?
long myLong = 123456789
long rounded = (myLong/10000) * 10000; //rounded = 123450000
這似乎做什麼,我希望,但我不是100%在整數類型如何分解的內部,我只是稍微擔心可能會出現這種情況,這種情況不能按預期的方式工作。
這仍然可以在非常大的數量/邊緣情況下工作嗎?
我有一個64位長,我要向下舍到最近的10,000,所以我做一個簡單的:劃分整數類型 - 結果是否可預測?
long myLong = 123456789
long rounded = (myLong/10000) * 10000; //rounded = 123450000
這似乎做什麼,我希望,但我不是100%在整數類型如何分解的內部,我只是稍微擔心可能會出現這種情況,這種情況不能按預期的方式工作。
這仍然可以在非常大的數量/邊緣情況下工作嗎?
是的,只要沒有結果,中間或其他,超過long.MaxValue
,它就會起作用。
爲了明確您的常量,您可以在末尾使用L
說明符,例如, 123456789L
。對於像這樣的直接計算,我可以建議來自Microsoft的Pex(http://research.microsoft.com/en-us/projects/pex/),它尋找邊緣案例並對其進行測試。這是一個乾淨利落的例子,但是如果你基於你不確定的東西建立了很多邏輯,那麼這是一個很棒的工具。
是的,它會工作。整數除法的語義保證你所期望的。
但是,爲您的特定用例(包括邊緣案例)編寫一些測試可能會很好。這會讓你放心。