代码之家  ›  专栏  ›  技术社区  ›  AlanSTACK

当浮点数为零时,您能安全地将其与整数进行比较吗?[副本]

  •  1
  • AlanSTACK  · 技术社区  · 8 年前

    这样比较浮点数和整数安全吗?

    private static void foo(float n) {
        if (n >= 1 || n <= 0) {
          // code 
        } 
    }
    

    根据 JLS (5.6.2. Binary Numeric Promotion) float ,另一个转换为 浮动 在比较之前。 但据我所知,如果转换后的浮点与原始浮点是二进制的,那么这样的比较将返回true。我们怎样才能保证?

    0 回复  |  直到 9 年前
        1
  •  6
  •   Jim Garrison    8 年前

    是的,你的具体例子很好,因为 0 1 float .

    请注意,这在一般情况下是不正确的:有许多大型的 int 不能精确表示为 . 例如,以下是打印出来的 true ( Ideone

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class FloatTest {
    
        private static boolean isTwoBillion(float f) {
            return f == 2_000_000_000;
        }
    
        public static void main (String[] args) {
            System.out.println(isTwoBillion(2_000_000_001));
        }
    
    }
    

    注意,不像 浮动 , double 整数 价值。

    但是,有 long 双重的 s、 开始于 长的 价值 9_223_372_036_854_764 那就是 Long.MAX_VALUE/1000 - 10 ...765 )没有 对应的,而下面的数字( ...766 ...764 作为一个 双重的 …766年 长的