2017-07-17 42 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