【问题标题】:Difference between Java and postgres value of BigDecimal/numericBigDecimal/numeric的Java和postgres值的区别
【发布时间】:2020-06-08 01:52:51
【问题描述】:

我在 Java 项目中使用 BigDecimal 类型。我正在尝试使用带有数字字段的函数来保存它。 Java 和 postgres 有不同的价值。例如。 Java 中的 56.97 值在 postgres 中保存为 56.9699999999999989。如何预防?

【问题讨论】:

  • 数据库中列的数据类型究竟是什么?
  • ..你是如何保存 Java 端的值的?
  • 如何在 SELECT 语句中将 varchar 值转换为数字?
  • @Bob 不是描述你在做什么,而是如何编辑问题并显示代码的相关部分。通过将数字数据存储为文本,您已经在做错一件事,但您也可能做错了其他事情。

标签: java postgresql precision numeric bigdecimal


【解决方案1】:

如果您访问 postgresql 文档: https://www.postgresql.org/docs/current/datatype-numeric.html

我猜你使用的是实数或双精度,它们被描述为“可变精度,不精确”。

如果你想让它准确,假设我们在谈论金钱或类似的东西,那么你应该使用numericdecimal 类型:

NUMERIC(precision, scale)

精度是总位数,小数位数是小数部分的位数。

例如,数字 1234.567 的精度为 7,小数位数为 3。

【讨论】:

  • Java 的 BigDecimal 不是“实数或双精度”。
  • 在 PostgreSQL 中,实数或双精度是 postges 中的数字类型。但是,如果您需要精确的数据,您应该使用数字或小数。
  • 啊,我明白了。当他说“数字”时,OP 并不是指numeric
猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2016-06-03
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多