2015-07-10 72 views
-1

我想划分数值并将它们四舍五入至小数点后8位,但我发现有些分区以返回科学计数法postgresql round division

我怎样才能总是在没有科学记数法的情况下划分?

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

    回报0.00000123预期。

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

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

我如何能圆100000000分之1到8位小数,并返回0.00000001

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

感谢您的帮助。 最好,

+0

我认为默认比例是6.尝试使用类似'decimal(18,8)'的东西。 –

+0

@GordonLinoff,不要工作。见:http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534 – user1221679

+1

'1e-8'和'0.00000001'是同样的事情,不是吗? –

回答

1

这是太长的评论。

其实,当我在Postgres 9.3.4中使用pgadmin尝试你的代码时,两者都返回你想要的值。值为而不是按指数表示法。因此,我怀疑这是您的应用程序的问题,而不是数据库。

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

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

这应该回报指数形式。

+0

你是对的,铸造文本返回值不是指数/科学 只需显示值(而不是计算),这就是我所需要的。 这里更新sqlfiddle演示:http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1550 – user1221679

0

大概是第二种情况下逾越精度范围8.

您可以检查此问题Selecting floating point numbers in decimal form

还什么版本的你,因为在pgAdmin的9.2我得到了不同的结果,工作

enter image description here

+0

postgresql v9.4 ..参见http://sqlfiddle.com/#!15/9eecb7db59d16c80417c72d1e1f4fbf1/1534 – user1221679