如何检查号码是否可以被特定数字整除,或者两个数字都是十进制的。小数点值为两位数。
我试过下面的
GridLayout
但在某些情况下,它没有提供适当的输出。
我怎么解决它。在这里我提出了一些示例值
(((dn / size) % 1) == 0)
和尺寸可能为double dn = 369.35,369.55.370.55
等......
0.05,0.10,0.5
请帮我把它缩短。
答案 0 :(得分:1)
(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
而不是截断,再次消除浮点问题,依赖于我认为这个平台的一个怪癖,public class SimpleTest {
public static class B{
public static B mapFrom(A a){
return new B(); //transform to b
}
}
public static class A{
}
public static Integer mapToSomethingElseWith(Supplier<B> b){
return 1;
}
public static void example(){
List<A> a = Lists.newArrayList(new A(),new A(),new A());
List<Integer> l = a.stream()
.map(B::mapFrom)
.map(SimpleTest::mapSomethingElseWith); //does not work. Bad return type in method reference: cannot convert java.lang.Integer to R
.collect(Collectors.toList());
}
}
返回一个整数类型。
答案 1 :(得分: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);