Check if a number is a double or an int

后端 未结 5 2082
没有蜡笔的小新
没有蜡笔的小新 2021-02-06 11:49

I am trying to beautify a program by displaying 1.2 if it is 1.2 and 1 if it is 1 problem is I have stored the numbers into the arraylist as doubles. How can I check if a Number

相关标签:
5条回答
  • 2021-02-06 12:02

    You can use:

    double x=4;
    
    //To check if it is an integer.
    return (int)x == x;
    
    0 讨论(0)
  • 2021-02-06 12:07

    I am C# programmer so I tested this in .Net. This should work in Java too (other than the lines that use the Console class to display the output.

    class Program
    {
        static void Main(string[] args)
        {
            double[] values = { 1.0, 3.5, 123.4567, 10.0, 1.0000000003 };
            int num = 0;
            for (int i = 0; i < values.Length; i++ )
            {
                num = (int) values[i];
                // compare the difference against a very small number to handle 
                // issues due floating point processor
                if (Math.Abs(values[i] - (double) num) < 0.00000000001)
                {
                    Console.WriteLine(num);
                }
                else // print as double
                {
                    Console.WriteLine(values[i]);
                }
            }
            Console.Read();
        }
    }
    
    0 讨论(0)
  • 2021-02-06 12:19

    Well, you can use:

    if (x == Math.floor(x))
    

    or even:

    if (x == (long) x) // Performs truncation in the conversion
    

    If the condition is true, i.e. the body of the if statement executes, then the value is an integer. Otherwise, it's not.

    Note that this will view 1.00000000001 as still a double - if these are values which have been computed (and so may just be "very close" to integer values) you may want to add some tolerance. Also note that this will start failing for very large integers, as they can't be exactly represented in double anyway - you may want to consider using BigDecimal instead if you're dealing with a very wide range.

    EDIT: There are better ways of approaching this - using DecimalFormat you should be able to get it to only optionally produce the decimal point. For example:

    import java.text.*;
    
    public class Test
    {
        public static void main(String[] args)
        {
            DecimalFormat df = new DecimalFormat("0.###");
    
            double[] values = { 1.0, 3.5, 123.4567, 10.0 };
    
            for (double value : values)
            {
                System.out.println(df.format(value));
            }
        }
    }
    

    Output:

    1
    3.5
    123.457
    10
    
    0 讨论(0)
  • 2021-02-06 12:20

    Another simple & intuitive solution using the modulus operator (%)

    if (x % 1 == 0)  // true: it's an integer, false: it's not an integer
    
    0 讨论(0)
  • 2021-02-06 12:23

    Alternatively one can use this method too, I found it helpful.

    double a = 1.99; 
    System.out.println(Math.floor(a) == Math.ceil(a));
    
    
    0 讨论(0)
提交回复
热议问题