Java:检查两个双精度数之间是否有100的倍数

时间:2015-10-14 21:16:50

标签: java

我想检查(包括)两个双打之间的东西是否是一百的倍数。

使用 30 45 8 204 165 95 28 180 110 40 .......... 30 8 45 165 95 28 180 110 40 8 30 45 95 28 165 110 40 8 30 45 28 95 110 40 8 30 28 45 95 40 8 28 30 45 40 8 28 30 40 8 28 30 8 28 8 我可以检查一个双,但我想检查两个双打。

示例:

if (double1 % 100 == 0) 应该返回false但是 double double1 = 398, double2 = 399.6; 应该回归真实。

4 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,那么以下步骤可能会有所帮助:

     
  • Ceil越小,地板就越大,然后将两者都转换成整数
  • 用户a循环检查从最小到最大的任何整数是否为100的倍数。

基于第一个数字总是小于第二个数字的假设,下面显示了一个示例代码,但这不是很有效。

static boolean isDivisibleby100(double double1, double double2) {
    int int1 = (int) Math.ceil(double1);
    int int2 = (int) Math.floor(double2);

    for (int i = int1; i <= int2; i++) {
        if (i % 100 == 0) {
            return true;
        }
    }

    return false;
}

答案 1 :(得分:0)

当案例为true

时,请考虑数百个位置(和更大)总会有不同的数字
double1 = 398
          ^ //look at that digit - (and greater)
double2 = 399.6
          ^ //they are the same, return false!



double1 = 797.5
          ^ //look at that digit - (and greater)
double2 = 801.2
          ^ //they are not the same, return true!

double1 = 2300
          ^^ //look at that digit - (and greater)
double2 = 230
          ^ //they are not the same, return true!

您可以轻松地将它们转换为int值(因此忽略任何小数值),然后除以100(砍掉以下数百位以下的任何值)它现在是一个int

如果您的值也可能是负值,-7575都会分为0并且相同,从而返回false

对于这种情况,一种简单的检查方法是乘以双打并查看它是否小于或等于0

double1 = -50;
double2 = 1;
//multiply, result is <= 0, return true

double1 = -5;
double2 = -2;
//multiply, result is > 0, return false

double1 = 1;
double2 = 3;
//multiply, result is > 0, return false

double1 = 0;
double2 = 3;
//multiply, result is <= 0, return true

答案 2 :(得分:0)

给定双精度d1和d2,是否存在整数x,使得x是100的倍数,并且在[d1,d2]范围内?

1)如果两个数字之间的差异为> = 100,则返回true。

2)如果d1 / 100(整数除法)!= d2 / 100,则返回true

3)如果d1 * d2 <= 0,则返回true

4)如果d1或d2是100的倍数,则返回true

5)返回false

步骤1处理诸如(100,1100)之类的情况。步骤2处理诸如(250,300)之类的情况。步骤3处理诸如(-5,5)或(0,10)的情况。步骤4处理诸如(100,101)之类的情况。

&#13;
&#13;
function test(d1, d2) {
  if (d2 - d1 >= 100) return true;
  if (((d1/100)|0) != ((d2/100)|0)) return true;
  if (d1*d2 <= 0) return true;
  if ((d1|0) % 100 == 0 || (d2|0) % 100 == 0) return true;
  return false;
}

var cases = [
             true, 100, 200, 
             true, 0, 1, 
             true, -5, 5, 
             true, 99, 101, 
             true, 10.2, 101.2, 
             true, -0.1, 1.1,
             true, 100, 100,
             true, 0, 0,
             false, 50, 99, 
             false, 101, 102, 
             false, 394.3, 399.9,
             false, 1, 1,
             false, 1001.2, 1001.4
            ];

for (var i = 0; i < cases.length; i += 3) {
  if (test(cases[i + 1], cases[i + 2]) != cases[i]) {
      alert("fail! " + cases[i + 1] + " " + cases[i + 2]);
  }
}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我认为这里提出的其他解决方案有点过于复杂 以下是如何在O(1)中完成的。

public class Test011 {

    public static void main(String[] args) {
        System.out.println(containsMultipleOf100(99.5, 101.2));
        System.out.println(containsMultipleOf100(101.1, 201.2));
        System.out.println(containsMultipleOf100(100.001, 199.992));
    }

    static boolean containsMultipleOf100(double double1, double double2) {
        long int1 = (long) Math.ceil(double1);
        long int2 = (long) Math.floor(double2);

        if ((int2 - (int1-1)) >= 100){
            return true;
        }else{
            return (int2 / 100) * 100 >= int1;
        }
    }
}