【问题标题】:Oracle Format Float Numbers 11gOracle 格式浮点数 11g
【发布时间】:2012-09-30 06:56:54
【问题描述】:

我要格式化

if integer, then integer.00

if float, then float.xx (2 digits of precision)

我有一个除法运算,其值可能是整数或浮点数。我想以 2 位精度存储结果。我怎样才能做到这一点?

【问题讨论】:

  • 你说的是存储数据吗?还是显示数据?从数据存储的角度来看,你不能存储像 1.00 这样的东西——它只会被存储为 1。当然,你可以控制值如何显示给用户并显示字符串 1.00。同样,您可以在存储之前将实数四舍五入(或截断)为两位小数,或者您可以以全精度存储该值并简单地向用户显示两位精度。
  • @JustinCave 是关于显示数据的。
  • @Bob:倒数第二句“我想以 2 位精度存储结果”。虽然我认为这是可能的。看我的回答。

标签: oracle casting floating-point type-conversion


【解决方案1】:

如果真的只是输出,你可以使用圆形运算符或简单地格式化它。

round  ( value/divisor , 2)
to_char( value/divisor ,'99,999,999,990.99') 

请在小数点前注明0。这使得低于 1 的值在前导零的情况下看起来更漂亮。例如。 0.55 而不是 .55

Example SQL Fiddle

create table test (dividend       number, 
                   divisor        number, 
                   result         number,
                   result_rounded number);

insert into test values (100,10,null,null);
insert into test values (9,5,null,null);
insert into test values (10,15,null,null);

update test set  result         = dividend / divisor
                ,result_rounded = round(dividend/divisor,2); 

select * from test;

结果:

    DIVIDEND   DIVISOR     RESULT           RESULT_ROUNDED
    100        10          10               10
    9          5           1.8              1.8
    10         15          0.666666666667   0.67

但最后,当您尝试输出它时,格式开始起作用,并且舍入并没有太大区别。

Example SQL Fiddle

select to_char(result,'99,999,999,990.99'),
       to_char(result_rounded,'99,999,999,990.99') 
from test;

结果

10.00    10.00
1.80     1.80
0.67     0.67

【讨论】:

    【解决方案2】:

    试试这个

    SELECT TO_CHAR(1,'99,999,999,999.99') FROM DUAL;  -- THIS GIVES 1.OO
    
    SELECT TO_CHAR(1.3,'99,999,999,999.99') FROM DUAL;  -- THIS GIVES 1.30
    

    重复的99999 仅用于 BILLION 格式。对于数千人,应该是999,999.99

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 2013-10-07
      • 2015-12-12
      • 1970-01-01
      • 2023-03-18
      • 2014-03-01
      • 2019-01-06
      • 1970-01-01
      相关资源
      最近更新 更多