Как проверить, чтобы первые 3 цифры находились в диапазоне 100–300 (включительно), а вторые 3 цифры - в диапазоне 001–999 (включительно) в следующих - PullRequest
0 голосов
/ 23 апреля 2019
private boolean validateSno(double inSno) {
  //sno is the serial number


  int firstThree=(int)inSno;
  double secondThree=(inSno-firstThree)*1000;
  boolean same=false;
  double checkDigit=inSno*1000-(int)inSno;

  if(checkDigit>0.0)
  {
  same=false;
  }
  else 
  {
      if(firstThree>=100&&firstThree<=300)
      {
      if(secondThree>=001&&secondThree<=999)
      {
          same=true;
      }

      }
  }
  return same;
}

Мне нужно, чтобы результат был в форме XXX.YYY, но так как это реальное число, я застрял в том, как разделить первые 3 числа и вторые 3 числа.У каждого своя валидация, необходимая

Есть ли простой способ с использованием mod / div или?

Ответы [ 3 ]

0 голосов
/ 23 апреля 2019

Возможно, вы решите использовать строку и класс stringtokenizer.

Это хитрый способ, но не такой уж плохой.

import java.util.StringTokenizer;

public class TestAnyParser {

    public static void main(String[] args)
    {
        validateSno(456.234);
    }

    private static boolean validateSno(double inSno) {
        boolean isReal = false;

        String sInSno = String.valueOf(inSno);

        StringTokenizer stTok = new StringTokenizer(sInSno, ".");

        isReal = stTok.countTokens() == 2;


        if(isReal)
        {

            int realpart = Integer.parseInt(stTok.nextToken());
            int imgpart =  Integer.parseInt(stTok.nextToken());

            System.out.println(realpart + ": " + imgpart);
        }
        else
        {
            //do something part.
        }


        return true;
    }

}
0 голосов
/ 23 апреля 2019

Следующее использует проверку строки с регулярным выражением, чтобы проверить, что числа имеют правильную длину и в правильном диапазоне

private boolean validateSno(double inSno) {
    String serial = String.valueOf(inSno);
    return serial.matches("[1-3]\\d{2}\\.[1-9][\\d]{2}\\d*");
}

Обратите внимание на дополнительные \\d*" в конце, это также должно утвердить значение, подобное 123.45600000001

0 голосов
/ 23 апреля 2019

Например, номер 456.234

double number = 456.234;
double firstThree = (int)number; \\ output 456
double lastThree = (number * 1000 % 1000); \\ output 234
...