我想格式化甲骨文格式浮点数11g中
if integer, then integer.00
if float, then float.xx (2 digits of precision)
我有一个除法运算,它的值可能会导致一个整数或浮点数。我想用2位精度来存储结果。我怎样才能做到这一点?
我想格式化甲骨文格式浮点数11g中
if integer, then integer.00
if float, then float.xx (2 digits of precision)
我有一个除法运算,它的值可能会导致一个整数或浮点数。我想用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
仅仅是10亿格式。对于成千上万的应用程序,它应该是999,999.99
如果只是输出,您可以使用舍入运算符或只是格式化它。
round (value/divisor , 2)
to_char(value/divisor ,'99,999,999,990.99')
请在小数点前注释0
。这使得低于1的值看起来更加漂亮,前导零。例如。 0.55
而不是.55
。
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
但最后,当您尝试输出该则格式进场以及四舍五入并没有太大的区别。
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
你说的是存储数据?或显示数据?从数据存储的角度来看,您不能存储类似1.00的内容 - 只会将其存储为1.您当然可以控制向用户显示值的方式并显示字符串“1.00”。同样,您可以在存储实数之前将实数四舍五入(或截断)为两位十进制数字,也可以以完全精度存储该值,并向用户简单显示两位数字的精度。 –
@JustinCave这是关于显示数据。 – Bob
@Bob:倒数第二句“我想**存储**精度为2位的结果”。虽然我认为这是可能的。看到我的答案。 – hol