2016-04-21 70 views
0

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

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等)。

+0

你不是要求一个有两位数的数字,而是要求一个字符串。你真的想要一个数字还是一个字符串? –

+0

更好的数字,但也可以是desribed格式的sring。 – MaMu

回答

4

您可以使用the FM number format modifier打压前导空格,但要注意您还需要使用.00而不是.99,如果您希望数字小于1而不是.50而显示为0.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(),因为这是默认行为,但它不会受到显式影响(可能会影响额外的函数调用)。

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

0

您是否试过使用演员操作?

你可以试试这个例子,很明显用你想要的精度代替30,2。

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

您可以找到转换操作,为的Oracle SQL here

0

的文档尝试用FORMAT选项COLUMN命令。

COLUMN COLUMN_NAME FORMAT 99.99 
SELECT COLUMN_NAME FROM TABLE_NAME .. 
2

您可以使用:

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

'fm'避免了前导空格和'00'说总是写两位数字的逗号后,即使是0 这将返回一个字符串与您的格式。

如果需要数字的舍入,不仅在第二个之后截断的数字,您可以将to_char到你的电话号码的round()