0

我正在使用 postgresql。我的数据库中的表具有类型为 .的列REAL。当实际值具有超过七个零时,postgresql 将其存储为例如 1e+007。当通过查询检索时,值返回也为 1e+007。但我需要值为 10000000 。解决方案是什么

4

3 回答 3

0

使用 SQL CAST。在 DB2 中为我工作

select cast(cast(1e+007 as real) as decimal (15,2)) from sysibm.sysdummy1;
10000000.00

您可以根据所需的值 (15,0) 设置小数位。

于 2013-04-12T10:22:27.860 回答
0
select to_char(1e+007::real, '9999999999')

手册中的更多详细信息:http ://www.postgresql.org/docs/current/static/functions-formatting.html

于 2013-04-12T11:21:18.827 回答
0

如果您将浮点数用于不适合的事物,您将遇到更多问题,包括几乎任何您关心数字的确切表示的事物。

我建议您使用NUMERIC,一种以 10 为底(十进制)的数字数据类型,可让您控制精度和比例。请参阅数字类型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.11200011数据库中,乘以 100。这是金融应用程序中的一种常见技术,尽管现在使用正确的十进制数据类型更为常见。

于 2013-04-13T01:03:41.047 回答