2017-07-17 62 views
0

如何查看數字是否可以被特定數字整除,或者兩個數字都不是十進制數字。小數點值爲兩位數。 我曾嘗試以下 (((dn/size) % 1) == 0)但在某些情況下,它不提供正確的輸出。我如何解決它。在這裏,我把一些示例值一樣 double dn = 369.35,369.55.370.55和大小可能不0.05,0.10,0.5等等Android帶有小數點的分頻點數

if(((dn/size) % 1) == 0) { 
     Log.d(TAG,"OK"); 
    } else { 
     Log.d(TAG,"OK"); 
    } 

請幫我短路了。

+0

類型轉換值之前,然後做數學題 – droidev

+0

你可以給我一個例子相似...... –

+0

給出了兩個正確的價值觀及以上值合適,他們是不是靜態的,他們可預期的輸出 – droidev

回答

1

(dn/size) % 1 == 0雖然看似合理,但會遇到以二進制浮點運算爲中心的陷阱。

如果您的號碼始終沒有兩個以上的小數位,然後以最簡單的辦法是通過乘以100規模,並依靠事實100 * y100 * x如果yx。換句話說:

if (Math.round(100 * dn) % Math.round(100 * size) == 0){ 
    Log.d(TAG,"Divisible"); 
} else { 
    Log.d(TAG,"Not divisible"); 
} 

這消除了二進制浮點算法的任何問題。我已經使用Math.round而不是故意截斷,再次以消除浮點附近的問題,我依靠什麼在我看來是這個平臺的怪癖,round返回一個整數類型。

延伸閱讀:Is floating point math broken?

+0

我不能輪大小值 –

+0

如果我輪0.05它返回5這是不正確 –

+0

你是什麼意思? – Bathsheba

0

你錯誤地做這件事,

嘗試使用此代碼

if(dn % size == 0) { 
    Log.d(TAG,"Divisible"); 
} else { 
    Log.d(TAG,"Not divisible"); 
} 

更新

使用BigDecimal如果你有大的十進制數

如:

BigDecimal bg1, bg2, bg3; 

bg1 = new BigDecimal("513.54"); 
bg2 = new BigDecimal("5"); 

// bg2 divided by bg1 gives bg3 as remainder 
bg3 = bg1.remainder(bg2); 
+0

我已經試過這個,但沒有工作。 –

+0

@Madhav_nimavat告訴我它不工作? – droidev

+0

不,一般不會因爲浮點笑話數字。你會因二元理性而幸運。 – Bathsheba