我正在使用postgresql。我的数据库中的表具有类型为REAL
的列。当postgresql的真值超过7时,将其存储为例如1e + 007.当它被查询检索时,返回值也作为1e + 007.但我需要的值为10000000。解决方案是什么
答案 0 :(得分:0)
使用SQL CAST
。在DB2中为我工作
select cast(cast(1e+007 as real) as decimal (15,2)) from sysibm.sysdummy1;
10000000.00
您可以根据所需的值设置小数位(15,0)。
答案 1 :(得分:0)
select to_char(1e+007::real, '9999999999')
手册中的更多详细信息:http://www.postgresql.org/docs/current/static/functions-formatting.html
答案 2 :(得分:0)
如果你将浮点数用于他们不适合的事情,你会遇到更多的问题,包括你关心数字的确切表示的几乎任何事情。
我建议您使用NUMERIC
,一种基数为10(十进制)的数字数据类型,可让您控制精度和比例。见Numeric types。 NUMERIC
以较慢的速度执行计算并消耗更多存储空间,因此它并不总是正确的答案,但它适用于众多应用程序。
你可以使用浮点数,它更难,因为你无法安全地比较完全相等,必须使用舍入和格式化功能进行显示等。
示例:
regress=> select '1.2'::float8 - '1.0'::float8;
?column?
----------------------
0.199999999999999956
(1 row)
regress=> select '1.2'::numeric - '1.0'::numeric;
?column?
----------
0.2
(1 row)
这类问题的另一个常见解决方案是使用应用程序定义的定点表示。如果您需要(比方说)2个小数位,您只需将数字2000.11
作为200011
存储在数据库中,再乘以100.这是金融应用程序中的常用技术,尽管现在更常见的是使用正确的十进制数据类型。