我正在运行一个 JSP Web 应用程序,该应用程序从 Oracle 数据库检索数值并将其显示在网页上。我手动输入了值 2929.2,并手动查询数据库确认它已存储为该值。但是,当我通过 JSP 检索它时,它显示为 2929.199951172。我该如何解决这个问题?我正在使用 ResultSets 和 getDouble() 方法。它以浮点形式存储在 Oracle 中,但是——请原谅我的愚昧——根据我的理解,它具有与 Java double 一样高的精度,而 getFloat() 并不是我想要的。
我浏览了一些有关 BigDecimal 的文章,但我对更改所有内容犹豫不决,除非我知道这是我所需要的。
最佳答案
您应该使用BigDecimal
,因为这就是它的目的:以任意精度处理浮点值。来自 BigDecimal
javadoc:
Immutable, arbitrary-precision signed decimal numbers. A
BigDecimal
consists of an arbitrary precision integer unscaled value and a 32-bit integer scale.
从数据库中的DECIMAL
(或NUMERIC
)字段检索数据时,此类型被大量使用,因为它允许保持数据库中存储的值的精度。这专门用于金融应用/操作。
顺便说一句,您还应该将 Oracle 数据库中使用的类型从 FLOAT
更改为 DECIMAL
也是如此。
I'm hesitant to change everything unless I know it's what I need
如果您希望/需要以正确的方式处理这些数值,则应将所有内容更改为BigDecimal
。
关于从 Oracle 数据库获取 float 时出现 Java 精度问题 - 无法正确舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23634552/