【问题标题】:Rounding numbers to 2 digits after comma in oracleoracle中逗号后将数字四舍五入为2位数
【发布时间】:2016-08-14 08:11:06
【问题描述】:

我正在寻找能够将逗号后的数字四舍五入或截断为 2 位数字的任何方法。我试过roundtruncto_char。但没有得到我想要的。

select round(123.5000,2) from dual;
select round(123.5000,2) from dual;

工作正常,但是当我在逗号后的第二位数字为零时,输出编号中的逗号后只有一个 1 位

select  to_char(23.5000, '99.99') from dual;

工作正常,但如果逗号前的数字有 3 位,我会得到 '###' 作为输出。 除此之外,我一开始就在这里空间。有什么明确的方法可以去掉这些空格吗?

我正在寻找一种方法来始终获取逗号后两位数字以及所有数字(1,10,100 等)的数字。

【问题讨论】:

  • 您不是要一个两位数的数字,而是要一个字符串。你真的想要一个数字还是一个字符串?
  • 更好的数字,但也可以是指定格式的字符串。

标签: sql oracle oracle11g


【解决方案1】:

您可以使用the FM number format modifier 来抑制前导空格,但请注意,您还需要使用.00 而不是.99,并且您可能希望格式模型的最后一个元素在小数点之前如果您希望将小于 1 的数字显示为 0.50 而不是 .50,也可以使用零:

with t (n) as (
  select 123.5678 from dual
  union all select 123.5000 from dual
  union all select 23.5000 from dual
  union all select 0 from dual
  union all select 1 from dual
  union all select 10 from dual
  union all select 100 from dual
)
select n,
  round(n, 2) as n2,
  to_char(round(n, 2), '99999.99'),
  to_char(round(n, 2), 'FM99999.00') as str2,
  to_char(round(n, 2), 'FM99990.00') as str3
from t;

         N         N2 TO_CHAR(R STR2      STR3    
---------- ---------- --------- --------- ---------
  123.5678     123.57    123.57 123.57    123.57   
     123.5      123.5    123.50 123.50    123.50   
      23.5       23.5     23.50 23.50     23.50    
         0          0       .00 .00       0.00     
         1          1      1.00 1.00      1.00     
        10         10     10.00 10.00     10.00    
       100        100    100.00 100.00    100.00   

您并不严格需要 round(),因为这是默认行为,但明确表示也没有什么坏处(可能除了额外的函数调用对性能的微小影响之外)。

这会给你一个字符串,而不是一个数字。数字没有尾随零。用这些术语来描述实际数字是没有意义的。只有在将数字转换为字符串以进行显示时,尾随零才有意义。

【讨论】:

    【解决方案2】:

    您是否尝试过强制转换操作?

    你可以试试这个,显然用你想要的精度替换 30,2。

    SELECT CAST (someNumber AS DECIMAL(30,2)) FROM dual
    

    您可以找到有关 oracle sql here 的强制转换操作的文档

    【讨论】:

      【解决方案3】:

      你可以使用:

      select to_char(23.5000, 'fm999999999.00')
      from dual
      

      'fm' 避免了前导空格,'00' 表示始终在逗号后写两位数,即使它们是 0。 这将返回一个具有您的格式的字符串。

      如果您需要对数字进行四舍五入,不仅要截断第二个数字之后的数字,还可以将to_char 应用于您的数字的round()

      【讨论】:

        【解决方案4】:

        尝试带有FORMAT 选项的COLUMN 命令。

        COLUMN COLUMN_NAME FORMAT 99.99
        SELECT COLUMN_NAME FROM TABLE_NAME ..
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多