首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle NUMBER上运算的结果精度

Oracle NUMBER上运算的结果精度
EN

Stack Overflow用户
提问于 2017-08-03 01:39:43
回答 1查看 43关注 0票数 0

在2个Oracle默认/给定的NUMBER列(其中NUMBER没有设置(p,s) )上产生运算符的值的精度是多少?比如,如果我:

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-03 01:39:43

f1df2会是0.3666666666666...7吗?

是。

插入到未设置p,sNUMBER列中的数字将存储为'as given'。对这些列进行运算的结果精度显示为最高精度和小数位数列的精度和小数位数:

代码语言:javascript
复制
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

结果如下:

代码语言:javascript
复制
F1DF2                                     |F2DF3
------------------------------------------|-----
0.3666666666666666666666666666666666666667|0.75

请注意,这是正确的,即使将f1 重新定义为 (p,s),为NUMBER字段定义NUMBER似乎只会限制输入到该字段中的数据的精度。

现在,如果我们混合了任意精度类型和一个浮点数,会发生什么呢?好吧,根据甲骨文的Numeric Precedence规则:

如果任何操作数为数字,则在执行operation.

  • If操作之前,Oracle尝试将所有操作数隐式地转换为BINARY_DOUBLE,但是任何操作数为BINARY_DOUBLE,然后在执行operation.

  • If之前,Oracle尝试隐式地将所有操作数转换为BINARY_FLOAT。在执行

操作之前,Oracle尝试将所有操作数转换为NUMBER

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45467593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档