在2个Oracle默认/给定的NUMBER列(其中NUMBER没有设置(p,s) )上产生运算符的值的精度是多少?比如,如果我:
create table foo(field1 NUMBER, field2 NUMBER);
insert into foo (field1, field2) values (1.1, 3);
select field1/field2 as f1df2 from foo;f1df2会是0.3666666666666...7吗?
发布于 2017-08-03 01:39:43
f1df2会是0.3666666666666...7吗?
是。
插入到未设置p,s的NUMBER列中的数字将存储为'as given'。对这些列进行运算的结果精度显示为最高精度和小数位数列的精度和小数位数:
create table test_number(f1 number, f2 number, f3 integer);
-- remember integer in Oracle is NUMBER(38)
insert into test_number (f1, f2, f3) values (1.1, 3, 4);
select f1/f2 as f1df2, f2/f3 as f2df3 from test_number结果如下:
F1DF2 |F2DF3
------------------------------------------|-----
0.3666666666666666666666666666666666666667|0.75请注意,这是正确的,即使将f1 重新定义为 (p,s),为NUMBER字段定义NUMBER似乎只会限制输入到该字段中的数据的精度。
现在,如果我们混合了任意精度类型和一个浮点数,会发生什么呢?好吧,根据甲骨文的Numeric Precedence规则:
如果任何操作数为数字,则在执行operation.
操作之前,Oracle尝试将所有操作数转换为NUMBER
https://stackoverflow.com/questions/45467593
复制相似问题