开发者

Check if a number is a double or an int

开发者 https://www.devze.com 2023-04-02 12:32 出处:网络
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 th开发者_高级运维e arraylist as doubles. How can I check if a Number is a do

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 th开发者_高级运维e arraylist as doubles. How can I check if a Number is a double or int?


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


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

if (x % 1 == 0)  // true: it's an integer, false: it's not an integer


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();
    }
}


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

double a = 1.99; 
System.out.println(Math.floor(a) == Math.ceil(a));


You can use:

double x=4;

//To check if it is an integer.
return (int)x == x;
0

精彩评论

暂无评论...
验证码 换一张
取 消