Android除以小数的分数

时间:2017-07-17 10:40:20

标签: android math division modulo calculation

如何检查号码是否可以被特定数字整除,或者两个数字都是十进制的。小数点值为两位数。 我试过下面的 GridLayout但在某些情况下,它没有提供适当的输出。 我怎么解决它。在这里我提出了一些示例值 (((dn / size) % 1) == 0)和尺寸可能为double dn = 369.35,369.55.370.55等......

0.05,0.10,0.5

请帮我把它缩短。

2 个答案:

答案 0 :(得分:1)

(dn / size) % 1 == 0虽然看似合理,但却会遇到以二进制浮点运算为中心的陷阱。

如果您的数字总是不超过两位小数,那么最简单的方法就是按照100加倍扩展并依赖于100 * y100 * 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()); } } 返回一个整数类型。

进一步阅读:Is floating point math broken?

答案 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);