如何围绕包含最低有效零的数字?

时间:2017-02-15 13:31:20

标签: sql oracle11g

我正在尝试在Oracle中执行以下SQL查询

Select round ( 123.50000065 , 4 ) from dual;
Output : 123.5
Required output: 123.5000

感谢任何帮助。 ..

6 个答案:

答案 0 :(得分:0)

ROUND(numeric_expression,length [,function])

SELECT ROUND(123.9994, 3), ROUND(123.9995, 3);  

输出:

123.9990 124.0000

答案 1 :(得分:0)

而不是round(),请将to_char()cast()用于小数类型:

select to_char(val, '999.9999'),
       cast(val as decimal(10, 4))

答案 2 :(得分:0)

您可能希望将to_charrequired format

一起使用

下面将值舍入为4位小数并格式化为所需的字符串:

Select to_char(123.50000065, '999999999990D9999') x from dual;

如果您不想实际对数字进行舍入,即您只想在4位数之后截断,请使用:

Select to_char(trunc(123.50000065, 4), '999999999990D9999') x from dual;

答案 3 :(得分:0)

要控制显示数字的格式,可以通过应用正确的格式掩码将其强制转换为字符串。

根据您对输入值的舍入方式,其中一个可能很有用:

with test(x) as (
    select 123.50000065 from dual union all
    select 123.00004    from dual union all
    select 123.00005    from dual union all
    select 123.00008    from dual
)
select x, 
       to_char(x, 'FM99999999.0000'),
       to_char(trunc(x, 4), 'FM99999999.0000')
from test ; 

结果:

                         X TO_CHAR(X,'FM9 TO_CHAR(TRUNC(
-------------------------- -------------- --------------
           123,50000065000 123.5000       123.5000
           123,00004000000 123.0000       123.0000
           123,00005000000 123.0001       123.0000
           123,00008000000 123.0001       123.0000

答案 4 :(得分:0)

"舍入"是一个数学概念。值(带样本输入)为123.5。数学上123.5000与123.5相同。它们与STRINGS不同。

将123.5显示为123.5000的一种方法是将round()包裹在to_char()中。但是,这意味着您无法在进一步的计算中使用它(实际上Oracle将允许您 - 它将隐式转换回数字而不是抛出数据类型不匹配错误,因为它应该做)。

在大多数情况下,更好的方法是解决客户端软件中的格式,例如SQL Developer,SQL * Plus或Toad。以下是在SQL * Plus中执行此操作的方法:

SQL> Select round ( 123.50000065 , 4 ) as result from dual;

    RESULT
----------
     123.5

-- change the format of the numeric column "result"

SQL> column result format 999.0000

SQL> Select round ( 123.50000065 , 4 ) as result from dual;

   RESULT
---------
 123.5000

答案 5 :(得分:0)

我无法看到您从查询中获得123.5的方式。我的结果123.50000000

如果我理解正确,您需要4位有效小数位。 为什么不试试cast

select cast(123.50000065 as numeric(38,4))

输出:123.5000

测试它是否完成数字:

select cast(123.50000065 as numeric(38,6))

输出:123.500001