我正在寻找能够在逗号后将数字舍入或截断为2位数的任何方法。我尝试使用round
,trunc
和to_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等)。
答案 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 ..