2017-07-26 76 views
0

好吧,所以(说)我有一个数字,如7836.721。我想一个Oracle查询,可以给我下面的结果:回合一个数字并在oracle中保留尾随零

7837.000 

数量应四舍五入到一个人的地方,小数点后的所有数字被转换到零。

我用什么:

select round(7836.721,0) from dual 

这给了我:

7837 

任何帮助,将不胜感激。

回答

2

听起来像是你需要TO_CHAR ...

SELECT to_char(TRUNC(7836.721), '9999990.000') numbr 
FROM dual; 

NUMBR 
------------ 
    7837.000 

这并假定你之后的任何数量的3位小数,而不是7.12要去7.00是。


ETA:

这似乎是一个很奇怪的规定,但在这里你去:地方后

WITH sample_data AS (SELECT 123 numbr FROM dual UNION ALL 
        SELECT 123.12 numbr FROM dual UNION ALL 
        SELECT 123.1234 numbr FROM dual UNION ALL 
        SELECT 123.12345 numbr FROM dual UNION ALL 
        SELECT 0.12345 numbr FROM dual UNION ALL 
        SELECT 1.23456789e50 numbr FROM dual UNION ALL 
        SELECT NULL numbr FROM dual UNION ALL 
        SELECT 1.23e-50 numbr FROM dual) 
SELECT numbr, 
     ROUND(numbr) || CASE WHEN numbr != TRUNC(numbr) THEN 
           RPAD('.', LENGTH(numbr -TRUNC(numbr)), '0') END new_numbr 
FROM sample_data; 

    NUMBR NEW_NUMBR 
---------- -------------------------------------------------------------------------------- 
     123 123 
    123.12 123.00 
    123.1234 123.0000 
123.12345 123.00000 
    0.12345 0.00000 
1.23456789 1.23456789E+50 

    1.23E-50 0.000000000000000000000000000000000000000 
+0

是的,你的查询做的伎俩,但如果我的小数不固定为3. – hashir

+0

在那种情况下,我会好奇你为什么要输出小数点后的0。无论在小数点后有多少尾随0,数字都是相同的。此外,如果您使用的是给定格式,即通常显示的小数位数相同,您通常会希望输出保持一致。 – Boneist

+0

我明白你的好奇心。尾随零需要在表格中呈现。现在,如果我在一列中的小数点后有不同的数字位数,那么我怎样才能以动态的方式实现这个必要? 有没有可能? – hashir