【问题标题】:postgresql round divisionpostgresql 轮分区
【发布时间】:2015-07-10 21:02:26
【问题描述】:

我想对值进行除法并将它们四舍五入到小数点后 8 位,但我发现有些除法以科学记数法返回。

如果没有科学记数法,我怎么能总是得到四舍五入?

  • select round( 123/100000000::decimal, 8 )

    按预期返回0.00000123

  • select round( 1/100000000::decimal, 8 )

    返回1e-8 但是...我期待0.00000001

如何将 1/100000000 舍入到小数点后 8 位并返回 0.00000001

sql 小提琴:http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534

感谢您的帮助。 最好的,

【问题讨论】:

  • 我认为默认比例是 6。尝试使用 decimal (18, 8) 之类的东西。
  • @GordonLinoff,也不要工作。见:sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534
  • 1e-80.00000001 是同一个东西,不是吗?
  • 您使用的是什么客户端应用程序?准确的 PostgreSQL 版本(来自SELECT version()?

标签: sql postgresql


【解决方案1】:

实际上,当我使用 pgAdmin 在 Postgres 9.3.4 中尝试您的代码时,两者都返回您想要的值。这些值在指数符号中 not。因此,我怀疑这是您的应用程序的问题,而不是数据库的问题。

一种简单的检查方法是将值作为字符串:

select round( 1/100000000::decimal, 8 )::text

这应该返回指数符号。

【讨论】:

【解决方案2】:

可能第二种情况超出精度范围 8。

你可以查看这个问题Selecting floating point numbers in decimal form

还有你正在使用什么版本,因为在 pgAdmin 9.2 中我得到了不同的结果

【讨论】:

猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2015-09-29
  • 2018-08-24
  • 1970-01-01
相关资源
最近更新 更多