2012-09-30 117 views
0

我想格式化甲骨文格式浮点数11g中

if integer, then integer.00 

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

我有一个除法运算,它的值可能会导致一个整数或浮点数。我想用2位精度来存储结果。我怎样才能做到这一点?

+0

你说的是存储数据?或显示数据?从数据存储的角度来看,您不能存储类似1.00的内容 - 只会将其存储为1.您当然可以控制向用户显示值的方式并显示字符串“1.00”。同样,您可以在存储实数之前将实数四舍五入(或截断)为两位十进制数字,也可以以完全精度存储该值,并向用户简单显示两位数字的精度。 –

+0

@JustinCave这是关于显示数据。 – Bob

+0

@Bob:倒数第二句“我想**存储**精度为2位的结果”。虽然我认为这是可能的。看到我的答案。 – hol

回答

1

试试这个

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仅仅是10亿格式。对于成千上万的应用程序,它应该是999,999.99

3

如果只是输出,您可以使用舍入运算符或只是格式化它。

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