格式编号,以显示至少1个小数

时间:2017-08-01 14:04:10

标签: sql oracle

我有不同小数的数字 - 可能正好是100或100.65468151。 我需要的是 - 显示至少1个小数(或更多)。因此,如果它恰好是100 - 它应该显示为100.0。 100.65468151应显示所有可用的小数。

我该怎么做? 附:如果需要,它可以转换为char。

1 个答案:

答案 0 :(得分:2)

这似乎是一个奇怪的要求,但你可以使用to_char()format model;只需使用`999.099999999'虽然不会很有效:

with t (n) as (
  select 100 from dual
  union all select 100.0 from dual
  union all select 100.6 from dual
  union all select 100.654 from dual
  union all select 100.65468151 from dual
)
select n, to_char(n, '999999999.09999999') as text
from t;

         N TEXT               
---------- -------------------
       100        100.00000000
       100        100.00000000
     100.6        100.60000000
   100.654        100.65400000
100.654682        100.65468151

但如果添加the FM format modifier,则不会包含额外的尾随零:

with t (n) as (
  select 100 from dual
  union all select 100.0 from dual
  union all select 100.6 from dual
  union all select 100.654 from dual
  union all select 100.65468151 from dual
)
select n, to_char(n, 'FM999999999.09999999') as text
from t;

         N TEXT               
---------- -------------------
       100 100.0              
       100 100.0              
     100.6 100.6              
   100.654 100.654            
100.654682 100.65468151       

在小数点之前和之后需要适当数量的9,因此当然可以渲染所有可能的值;并且您可能更喜欢将小数点前的最后9位设为零。您可能还需要考虑使用D格式元素而不是句点.,以便它尊重会话NLS设置。

或者,让您的表示层(应用程序,报告工具或其他)进行格式化。你应该把它留作实际的数字直到最后一刻。