【问题标题】:How to check whether input value is integer or float?如何检查输入值是整数还是浮点数?
【发布时间】:2011-01-18 18:19:32
【问题描述】:

如何判断输入值是整数还是浮点数?

假设 312/100=3.12 这里我需要检查 3.12 是浮点值还是整数值,即没有任何小数位值。

【问题讨论】:

  • 请用你的话定义浮点数和整数。虽然我没有投反对票
  • 我们需要更多信息才能为您提供帮助。有些类型会有所帮助。比如你上面提供的3.12。那是作为字符串进来的吗?或者,您是在划分 2 个整数并想知道答案是否为整数?帮助我们帮助您。
  • 嗨,为什么要对 java freshers 投反对票。两者都是 int 值。我正在寻找任何预定义的方法来检查结果值是 float 还是 int。
  • 从问题中并不清楚您是否要检查结果值本身是整数还是保存它的变量。
  • 我必须检查结果值。

标签: java floating-point int rounding


【解决方案1】:

还有:

(value % 1) == 0

会工作的!

【讨论】:

    【解决方案2】:

    您应该检查数字的小数部分是否为 0。 使用

    x==Math.ceil(x)
    

    x==Math.round(x)
    

    或者类似的东西

    【讨论】:

    【解决方案3】:

    您可以使用 Scanner 类来查找给定数字是否可以读取为 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");
         }
    }
    

    【讨论】:

      【解决方案4】:

      ceil 和 floor 方法将帮助您确定数字是否为整数。

      但是如果你想确定数字是否可以用 int 值表示。

      if(value == (int) value)
      

      或长(64位整数)

      if(value == (long) value)
      

      或者可以安全地用浮点数表示而不会损失精度

      if(value == (float) value)
      

      顺便说一句:除非必须,否则不要使用 32 位浮点数。在 99% 的情况下,64 位双精度是更好的选择。

      【讨论】:

      • 在你的三个例子中,变量value的类型是什么?
      • @broc.seib 任何数字原语,bytecharintshortfloatdoublelong 都可以,但是第一次检查只对longfloatdouble 有意义,否则总是正确的。
      【解决方案5】:

      Math.round() 返回与给定输入值最接近的整数。如果您的浮点数已经有一个整数值,那么“最近的”整数将是相同的值,所以您需要做的就是检查 Math.round() 是否更改了该值:

      if (value == Math.round(value)) {
        System.out.println("Integer");
      } else {
        System.out.println("Not an integer");
      }
      

      【讨论】:

        【解决方案6】:

        这个怎么样。使用模运算符

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

        【讨论】:

        • +1 这似乎是最好的解决方案。如果将两个非常大的数字相除,则无法确定结果是否真的是 int,还是非常接近它,因此使用 ceil、floor 或 round 的方法可能会失败。
        • 我同意,但由于 OP 已经接受了答案,我没有费心回应:-(。这也是常识性的做法,因此直观且易于维护
        【解决方案7】:

        这样做是为了区分。

        例如,如果您的号码是 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 不是整数。

        【讨论】:

          【解决方案8】:

          你可以使用RoundingMode.#UNNECESSARY如果你想/接受异常抛出,否则

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

          如果在产生不精确结果的操作上指定此舍入模式,则会引发 ArithmeticException。

          如果不是整数值则异常:

          java.lang.ArithmeticException: Rounding necessary
          

          【讨论】:

            猜你喜欢
            • 2020-05-05
            • 1970-01-01
            • 2019-10-05
            • 2011-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多