【问题标题】:Adding decimal point and zeroes in Oracle在Oracle中添加小数点和零
【发布时间】:2015-09-24 21:37:57
【问题描述】:

有没有办法指定 double 数据类型在小数点后总是有 2 点,就像货币通常有 (oracle db) 一样?

即:

100 will be converted to 100.00
101.1 will be converted to 101.10

尝试强制转换并设置精度比例,但没有添加默认小数点和零

SELECT CAST((600.2) AS NUMERIC(28,2)) FROM DUAL;

给我600.2

【问题讨论】:

  • 将它们存储为数字并使用to_char() 函数格式化输出。 to_char(num_col, 'fm990D00')。更改格式字符串,使其符合数字的长度。 Example
  • 您不应使用近似浮点数据类型,例如 double(在 Oracle 中为 BINARY_DOUBLE)。请改用精确类型,例如NUMBER(10,2)。至于显示的小数位,你已经得到了答案; 100 = 100.0 = 100.00 = 100.000 等,即存储的数字始终相同。如果您想要某种表示形式,请使用to_char 以所需格式的字符串显示数字。

标签: sql oracle number-formatting


【解决方案1】:
SELECT to_char(101, '999.90') FROM DUAL;
SELECT to_char(101.1, '999.90') FROM DUAL;

【讨论】:

    【解决方案2】:

    它只是在您的客户端中格式化输出。

    例如,在 SQL*Plus 中设置 numformat

    SQL> set numformat 999.99
    SQL> SELECT CAST((600.2) AS NUMERIC(28,2)) FROM DUAL;
    
    CAST((600.2)ASNUMERIC(28,2))
    ----------------------------
                          600.20
    

    您也可以使用 TO_CHAR,但仅用于显示,对于任何数字算术,您都应该保持数字不变。

    SQL> select to_char(600.2, '000.00') from dual;
    
    TO_CHAR
    -------
     600.20
    

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多