当前位置:  开发笔记 > 编程语言 > 正文

在Java中比较float和int是否安全?

如何解决《在Java中比较float和int是否安全?》经验,为你挑选了1个好方法。

比较浮点数和这样的整数是否安全?

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

根据JLS(5.6.2.二进制数字促销),如果其中一个参数是float,则另一个float在比较之前转换为.但据我所知,如果转换后的浮点数与原始浮点数相同,则此类比较将返回true.我们怎样才能确保呢?



1> NPE..:

是的,你的具体的例子是很好的,因为二者01可以准确地表示为float.

请注意,这通常不正确:有许多大int值不能完全表示为a float.例如,即使2_000_000_001不等于2_000_000_000,以下打印出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));
    }

}

请注意,与尾数相比float,double尾数足以存储每个32位int值.

但是,有些long值不能表示为doubles.这开始于存在的long9_223_372_036_854_764Long.MAX_VALUE/1000 - 10.第一个更大的(...765)没有double对应物,而下面的数字(...766)确实没有对应物.换句话说,从...764a 开始double,递增尾数的最后一位,...766当转换回时long.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有