JAVA - 将Double值与Float.MIN_VALUE或Integer.MIN_VALUE

时间:2017-03-03 14:21:12

标签: java double

我有以下问题。

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

Map<String,MyObject>

其中MyObject由3个数组组成:float [],int []和double []。 我使用Float.MIN_VALUE,Integer.MIN_VALUE和Double.MIN_VALUE来存储数据库中具有NULL值的值。

我需要处理输入哈希表并将输出存储在哈希表中

Map<String, Double> output

必须只包含NON NULL值。

所以,我进行这样的比较:

Double value = ... (get a value from MyObject)
if(value != Float.MIN_VALUE && value != Double.MIN_VALUE && value != Integer.MIN_VALUE){
    // add to OUTPUT hash table

但if语句在值等于Float.MIN_VALUE时无法正常工作:第一个组件总是返回TRUE(意味着两个值不同)。

我也尝试了类似的东西

if(value != new Double(Float.MIN_VALUE))

但问题仍然存在。

任何人都可以建议我一个正确比较价值的解决方案吗?

编辑:使用类似的东西是否安全:

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

似乎有效。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这篇文章已经有9个月了,但我的回复可能会帮助其他用户处理双打和浮动。 Fab我不知道你如何从你的对象获得float / double / int值,但是当你检查它时here:如果一个Object得到了 Float.MIN_VALUE ,它的值再次浮动或双倍肯定匹配 Float.MIN_VALUE

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的变量,匹配仍然成立:

    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_VALUE 的值指定为Float:

obj =  Float.MIN_VALUE; //1.40129846432481707E-45;

macths直到hold,即使obj的值被解释为Double:

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

我希望这会对某人有所帮助!