JAVA-将双精度值与Float.MIN_值或Integer.MIN_值进行比较

JAVA-将双精度值与Float.MIN_值或Integer.MIN_值进行比较,java,double,Java,Double,我有以下问题 我使用哈希表将一些数据存储在内存中(来自数据库查询): Map<String,MyObject> 但是如果值等于Float.MIN_值,if语句就不能正常工作:第一个组件总是返回TRUE(这意味着两个值不同) 我也试过类似的东西 if(value != new Double(Float.MIN_VALUE)) 但问题仍然存在 有人能给我建议一个正确比较这些值的解决方案吗 编辑:这样使用安全吗: String.valueOf(value).equals(String

我有以下问题

我使用哈希表将一些数据存储在内存中(来自数据库查询):

Map<String,MyObject>
但是如果值等于Float.MIN_值,if语句就不能正常工作:第一个组件总是返回TRUE(这意味着两个值不同)

我也试过类似的东西

if(value != new Double(Float.MIN_VALUE))
但问题仍然存在

有人能给我建议一个正确比较这些值的解决方案吗


编辑:这样使用安全吗:

String.valueOf(value).equals(String.valueOf(Float.MIN_VALUE))) ?

这似乎有效。

您应该使用double类提供的静态方法:

Double.isFinite(value);
Double.isInfinite(value);
Double.isNaN(value);
Double.compare(value, Double.MIN_VALUE)

这篇文章已经发布9个月了,但我的回答可能会帮助其他需要双倍和浮动的用户。 Fab我不知道如何从对象中获取浮点/双精度/整数值,但当您检查它时:如果一个对象获得分配的浮点.MIN_值,那么它的值再次作为浮点或双精度获得肯定会匹配浮点.MIN_值

Object obj =  Float.MIN_VALUE; //1.40129846432481707E-45;
float floatVal = ((Number) obj).floatValue();

System.out.println("obj is a " + obj.getClass().getSimpleName()); // obj is a Float 
boolean result  = floatVal == Float.MIN_VALUE;
System.out.printf("%.60f == %.60f: %s.\n" , floatVal, Float.MIN_VALUE, result ); // true
即使我们将从对象获得的值赋给声明为double的变量,匹配仍为true:

    double doubleVal = ((Number) obj).doubleValue();
    result  = doubleVal == Float.MIN_VALUE;
    System.out.printf("%.60f == %.60f: %s.\n" , doubleVal, Float.MIN_VALUE, result ); //true
如果我们不明确地将Float.MIN_值的值指定为Float:

obj =  Float.MIN_VALUE; //1.40129846432481707E-45;
尽管obj的价值被解释为双重价值,但macths till仍然有效:

floatVal = ((Number) obj).floatValue();
doubleVal = ((Number) obj).doubleValue();
Formatter fmt = new Formatter(); 

System.out.println("obj is a " + obj.getClass().getSimpleName()); // obj is a Double
result  = floatVal == Float.MIN_VALUE;
System.out.println(fmt.format("%18.17e", floatVal) + " == " + fmt.format("%18.17e", Float.MIN_VALUE) + "? " + result ); // true
result  = doubleVal == Float.MIN_VALUE;
System.out.println(fmt.format("%18.17e", doubleVal) + "= = " + fmt.format("%18.17e",Float.MIN_VALUE) + "? " + result ); // true

我希望这能帮助别人

浮点算法本质上是通用的,尤其是当涉及数据类型转换时。查看此处的所有答案:检查,为什么不使用
null
表示
null
?如果对Float.MIN_值进行精确的相等性测试就足够了,请在转换为Double之前尝试比较。需要使用Double.compare(VALUE,Double.MIN_值)@ΦXocę웃Пepeúpaツ 我还需要将值与Float.MIN_值进行比较,我的问题就在这里。值是双精度的,但必须与3 MIN_值进行比较:整数、浮点和双精度
obj =  Float.MIN_VALUE; //1.40129846432481707E-45;
floatVal = ((Number) obj).floatValue();
doubleVal = ((Number) obj).doubleValue();
Formatter fmt = new Formatter(); 

System.out.println("obj is a " + obj.getClass().getSimpleName()); // obj is a Double
result  = floatVal == Float.MIN_VALUE;
System.out.println(fmt.format("%18.17e", floatVal) + " == " + fmt.format("%18.17e", Float.MIN_VALUE) + "? " + result ); // true
result  = doubleVal == Float.MIN_VALUE;
System.out.println(fmt.format("%18.17e", doubleVal) + "= = " + fmt.format("%18.17e",Float.MIN_VALUE) + "? " + result ); // true