首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮动映射/与Oracle 10g中的数字有什么关系?

浮动映射/与Oracle 10g中的数字有什么关系?
EN

Stack Overflow用户
提问于 2013-07-02 01:00:06
回答 1查看 21.9K关注 0票数 5

Oracle 10g中的浮动数据类型是什么,它与数字有什么关系?

我在Oracle中唯一能找到的浮动引用是在本页的BINARY_DOUBLE部分:elements001.htm#i140621似乎表明它存储了一个浮点数,允许您指定位精度,但它没有引用数字类型。11g的文档根本没有提到浮动。

“专家Oracle数据库体系结构: Oracle数据库9i、10g和11g编程技术和解决方案,第二版”一书写道:

除了数字、BINARY_FLOAT和BINARY_DOUBLE类型之外,Oracle语法还支持以下数字数据类型: 当我说“语法支持”时,我的意思是CREATE语句可以使用这些数据类型,但是在封面下它们实际上都是数字类型。..。

  • 浮动(P):映射到数字类型。

我不明白的是它是如何映射成数字的。

NUMBER(p)允许我指定精度,但小数位数默认为0。似乎FLOAT(p)正在映射到NUMBER(decimal p, *),也就是说,固定的精度但是可变的比例,据我所知,这不是数字类型所允许的。

那么,FLOAT不仅仅是一个别名,而且还提供了数字本身不提供的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-02 02:19:04

10g中的文档有点不清楚。从11.1开始,情况有了很大的改善:

elements001.htm#sthref94

总之,FLOATNUMBER是相同的,有两个不同之处

  1. FLOAT无法指定比例
  2. FLOAT中,精度用二进制数表示,NUMBER用十进制数表示,所以FLOAT(126)表示126位精度,NUMBER(38)表示38位精度。

编辑一些例子表明,FLOAT只是一个伪装的NUMBER

代码语言:javascript
复制
CREATE TABLE t (
  n1 NUMBER(*,1),  f1 FLOAT(1), f2 FLOAT(2), f3 FLOAT(3),
  n2 NUMBER(*,2),  f4 FLOAT(4), f5 FLOAT(5), f6 FLOAT(6)
);
INSERT INTO t VALUES (1/3, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3, 1/3);

SELECT n1, f1, f2, f3 FROM t;
  0.3 0.3 0.3 0.3

SELECT DUMP(n1), DUMP(f1), DUMP(f2), DUMP(f3) FROM t;
  Typ=2 Len=2: 192,31
  Typ=2 Len=2: 192,31
  Typ=2 Len=2: 192,31
  Typ=2 Len=2: 192,31

SELECT n2, f4, f5, f6 FROM t;
  0.33 0.33 0.33 0.33

SELECT DUMP(n2), DUMP(f4), DUMP(f5), DUMP(f6) FROM t;
  Typ=2 Len=2: 192,34
  Typ=2 Len=2: 192,34
  Typ=2 Len=2: 192,34
  Typ=2 Len=2: 192,34

但是,要小心,从浮点数的精度位到数字的十进制数的转换系数不是3,而是大约3.32。确切地说,数字=ceil(位/ log(2,10) )。

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

https://stackoverflow.com/questions/17415847

复制
相关文章

相似问题

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