【问题标题】:Check if a number is a double or an int检查数字是 double 还是 int
【发布时间】:2011-11-10 00:14:40
【问题描述】:

我试图通过显示 1.2(如果是 1.2)和 1(如果是 1)来美化程序。问题是我已将数字作为双精度数存储到数组列表中。如何检查 Number 是 double 还是 int?

【问题讨论】:

  • 你能澄清一下你是指任何整数还是只想要 32 位签名的 int 值?

标签: java double int


【解决方案1】:

好吧,你可以使用:

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

甚至:

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

如果条件为真,即if 语句的主体执行,则值为整数。否则,它不是。

请注意,这会将 1.00000000001 视为仍然是双精度值 - 如果这些值已经计算(因此可能只是“非常接近”整数值),您可能需要添加一些容差.另请注意,对于非常大的整数,这将开始失败,因为它们无论如何都不能在 double 中精确表示 - 如果您处理的范围非常大,您可能需要考虑使用 BigDecimal

编辑:有更好的方法来解决这个问题 - 使用 DecimalFormat 您应该能够使其仅 可选 产生小数点。例如:

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

输出:

1
3.5
123.457
10

【讨论】:

  • @chuck:它会检查你给的值是否正好是一个整数。
  • +1: floor 将数字四舍五入为整数。只有整数是不变的,所以如果它相同,它一定是一个整数。顺便说一句:我假设您的意思是任何整数,而不是 32 位签名 int 本身。
  • 顺便说一句,它不适用于 MIN_VALUE 之外的整数MAX_VALUE
  • @bestsss,MIN_ 和 MAX_VALUE 是多少?
  • @bestsss:不是特别明显 - 我想知道你是不是指 Long.MAX_VALUE。
【解决方案2】:

另一个使用模数运算符 (%) 的简单直观的解决方案

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

【讨论】:

    【解决方案3】:

    我是 C# 程序员,所以我在 .Net 中对此进行了测试。这也应该在 Java 中工作(除了使用 Console 类来显示输出的行。

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

    【讨论】:

      【解决方案4】:

      或者也可以使用这种方法,我发现它很有帮助。

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

      【讨论】:

        【解决方案5】:

        你可以使用:

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

        【讨论】:

          猜你喜欢
          • 2011-05-31
          • 1970-01-01
          • 2017-10-12
          • 2011-01-02
          • 2015-07-31
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          相关资源
          最近更新 更多