Как проверить, имеет ли число с плавающей точкой целочисленное значение - PullRequest
51 голосов
/ 18 января 2011

Как проверить, является ли входное значение целым или плавающим?

Предположим, 312/100 = 3,12, здесь мне нужно проверить, является ли 3,12 с плавающей или целочисленной.

Ответы [ 8 ]

40 голосов
/ 18 января 2011

Вы должны проверить, что дробная часть числа равна 0. Используйте

x==Math.ceil(x)

или

x==Math.round(x)

или что-то в этом роде

22 голосов
/ 18 января 2011

Как насчет этого.используя оператор по модулю

if(a%b==0) 
{
    System.out.println("b is a factor of a. i.e. the result of a/b is going to be an integer");
}
else
{
    System.out.println("b is NOT a factor of a");
}
16 голосов
/ 18 января 2011

Методы ceil и floor помогут вам определить, является ли число целым числом.

Однако, если вы хотите определить, может ли число быть представлено значением int.

if(value == (int) value)

или длинное (64-разрядное целое)

if(value == (long) value)

или может быть безопасно представлено с плавающей точкой без потери точности

if(value == (float) value)

Кстати: не используйте 32-бит плавать, если вам не нужно.В 99% случаев 64-битный дубль - лучший выбор.

13 голосов
/ 18 января 2011

Math.round() возвращает ближайшее целое число к заданному вами входному значению.Если у вашего числа с плавающей точкой уже есть целочисленное значение, то «ближайшее» целое число будет тем же значением, поэтому все, что вам нужно сделать, это проверить, Math.round() меняет значение или нет:

11 голосов
/ 07 января 2016

Также:

(value % 1) == 0

будет работать!

3 голосов
/ 02 августа 2016

Вы можете использовать класс сканера, чтобы определить, может ли данное число быть прочитано как тип Int или Float.

 import java.util.Scanner;
 public class Test {
     public static void main(String args[] ) throws Exception {

     Scanner sc=new Scanner(System.in);

     if(sc.hasNextInt())
         System.out.println("This input is  of type Integer");
     else if(sc.hasNextFloat())
         System.out.println("This input is  of type Float");
     else
         System.out.println("This is something else");
     }
}
2 голосов
/ 18 января 2011

Сделайте это, чтобы отличить это.

Если, например, ваш номер 3,1214 и хранится в num, но вы не знаете тип num:

num = 3.1214
// cast num to int
int x = (int)num;
if(x == num)
{
  // num is a integer
} 
else
  // num is float
}

В этом примере мы видим, что num не является целым числом.

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

Вы можете использовать RoundingMode. # UNCECESSARY , если хотите / принять исключение, иначе

new BigDecimal(value).setScale(2, RoundingMode.UNNECESSARY);

Если этот режим округления указан для операции, которая дает неточный результатсоздается исключение ArithmeticException.

Исключение, если не целочисленное значение:

java.lang.ArithmeticException: Rounding necessary
...