在oracle中使用逗号后将数字舍入为2位数

时间:2016-04-21 08:43:36

标签: sql oracle oracle11g

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

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

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

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

工作正常,但如果逗号之前的数字有3位数字,我输出'###'。 除此之外,我在开始时就到了这里。有没有明确的方法来删除这些空格?

我正在寻找一种方法来总是得到逗号后的两位数和所有数字(1,10,100等)。

4 个答案:

答案 0 :(得分:4)

您可以使用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(),因为这是默认行为,但是明确是没有坏处的(除了可能的额外函数调用产生的微小性能影响)。

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

答案 1 :(得分:2)

您可以使用:

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

'fm'避免使用前导空格,'00'表示总是在逗号后写两位数,即使它们为0。 这将返回一个包含您格式的字符串。

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

答案 2 :(得分:1)

您是否尝试过施法操作?

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

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

您可以找到oracle sql here

的强制转换操作文档

答案 3 :(得分:0)

使用COLUMN选项尝试FORMAT命令。

COLUMN COLUMN_NAME FORMAT 99.99
SELECT COLUMN_NAME FROM TABLE_NAME ..