从 Oracle 数据库获取 float 时出现 Java 精度问题 - 无法正确舍入

标签 java oracle jsp precision bigdecimal

我正在运行一个 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/

相关文章:

java - 如何在显示JSP后执行hibernate session.close()以避免lazy=false

java - 如何获取TableView列的大小?

sql - SQL查询-在12小时内选择重复项

java - OracleDB : trigger on table for checking self-cycle/loops

sql - 将图像添加到 Oracle SQL Developer

java - 如何将带有html元素的jsonArray输出到JSP中

eclipse - Eclipse中找不到JSTL核心库描述符错误

java - 如何同时管理多个版本的类?

java - 使用自定义标题栏管理 Windows Aero 震动功能

java - 要求因 float 而失败