在PostgreSQL中格式化双精度

时间:2010-06-26 05:22:53

标签: postgresql formatting floating-point

我有一个包含3列的表格:

  customer_name varchar
 ,account_type varchar
 ,current_balance double precision

current_balance的示例值:

1200
1500.5
1500

我希望它们显示如下:

1200.00
1500.50
1500.00

我尝试了以下查询:

SELECT to_char(current_balance,'9999999999999999D99')
  FROM bank;

它按照我想要的方式格式化,但在开头添加空格。怎么解决这个?有没有更好的格式化方法?

3 个答案:

答案 0 :(得分:7)

正如评论中已经指出的那样it's bad design to use a floating point type (real, double, float) for a money balance。这会让你陷入困境。请改用DECIMAL

答案 1 :(得分:6)

您可以使用trim删除多余的空格。没有参数,它只删除空格。

charles=# SELECT to_char(12345.67,'99999999999999999D99');
        to_char
-----------------------
              12345.67
(1 row)

charles=# SELECT trim(to_char(12345.67,'99999999999999999D99'));
  btrim
----------
 12345.67
(1 row)

答案 2 :(得分:2)

to_char(current_balance, 'FM9999999999999999D99')

来自the docs

  

FM:前缀填充模式(抑制填充   空白和零)

如果您需要特定于区域设置的货币符号,请尝试L

to_char(current_balance, 'FML9999999999999999D99')
  

L:货币符号(使用区域设置)

PG 8.4对名为dbl的列的结果,值为12345.678,其中id = 1:

>>> import psycopg2
>>> conn = psycopg2.connect(host='localhost', database='scratch', user='',password='')
>>> c = conn.cursor()

>>> c.execute("select to_char(dbl, '9999999999999999D99') from practice where id = 1;")
>>> c.fetchall() # with padding
[('            12345.68',)]

>>> c.execute("select to_char(dbl, 'FM9999999999999999D99') from practice where id = 1;")
>>> c.fetchall() # no padding
[('12345.68',)]

>>> c.execute("select to_char(dbl, 'FML9999999999999999D99') from practice where id = 1;")
>>> c.fetchall() # with locale-specific currency symbol
[('$12345.68',)]
相关问题