如何从浮点数中获取地图值

How to get map values from a float

提问人:John Smith 提问时间:10/20/2023 最后编辑:John Smith 更新时间:10/20/2023 访问量:68

问:

我有一个地图,我想像在实线上的数学函数一样使用它,即我给它一个浮点值,它返回一个浮点值。

如果有这样的东西:

Map<Double, Double> map = new HashMap<>();

由于浮点不精确,尝试访问值时可能会得到 null。因此,使用浮点值作为地图的键是不明智的。

实现目标的最佳方式是什么?我需要有一个 (x, y) 值的映射,允许我从 x 值中获取 y 值。我想还有其他数据类型或不允许不精确的东西?

感谢所有回答。

Java 数学

评论

4赞 Arfur Narf 10/20/2023
不知道为什么你显然认为'get(0.5)'会返回唯一的条目,其键是1.0。浮点可能不精确,但并非如此不精确!
1赞 Arfur Narf 10/20/2023
但也许 NavigableMap 会为您完成这项工作。可以使用 floorEntry 和/或 ceilingEntry,然后确定键是否“足够接近”。
0赞 John Smith 10/20/2023
哎呀,错别字,但我在我的程序中以正确的值获得了 null,并且我读到由于上述原因,这不是一个好主意。
2赞 aled 10/20/2023
由于这些原因,Java Map 可能不是表示数学函数的好类型。
1赞 Spektre 10/20/2023
如果数据是连续的,则可以使用双线性或双三次插值来代替哈希映射

答:

1赞 Reilas 10/20/2023 #1

"...由于浮点不精确,尝试访问值时可能会得到 null。因此,使用浮点值作为地图的键是不明智的。..."

使用 BigDecimal 类。

class DoubleMap extends HashMap<BigDecimal, Double> {
    Double put(String k, Double v) {
        return super.put(new BigDecimal(k), v);
    }

    Double get(String k) {
        for (Entry<BigDecimal, Double> e : entrySet())
            if (e.getKey().toPlainString().equals(k))
                return e.getValue();
        return null;
    }
}
DoubleMap map = new DoubleMap();
map.put("1.23", 4.56);