Android带有小数点的分频点数
问题描述:
如何查看数字是否可以被特定数字整除,或者两个数字都不是十进制数字。小数点值为两位数。 我曾尝试以下 (((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");
}
请帮我短路了。
答
(dn/size) % 1 == 0
虽然看似合理,但会遇到以二进制浮点运算为中心的陷阱。
如果您的号码始终没有两个以上的小数位,然后以最简单的办法是通过乘以100规模,并依靠事实100 * y
分100 * x
如果y
分x
。换句话说:
if (Math.round(100 * dn) % Math.round(100 * size) == 0){
Log.d(TAG,"Divisible");
} else {
Log.d(TAG,"Not divisible");
}
这消除了二进制浮点算法的任何问题。我已经使用Math.round
而不是故意截断,再次以消除浮点附近的问题,我依靠什么在我看来是这个平台的怪癖,round
返回一个整数类型。
答
你错误地做这件事,
尝试使用此代码
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);
类型转换值之前,然后做数学题 – droidev
你可以给我一个例子相似...... –
给出了两个正确的价值观及以上值合适,他们是不是静态的,他们可预期的输出 – droidev