科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[Oracle]使用IEEE754FLOAT和DOUBLE 数据类型

[Oracle]使用IEEE754FLOAT和DOUBLE 数据类型

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Oracle 的 NUMBER 数据类型以一种不寻常的格式存储数字,这种不寻常的格式为二进制编码的十进制数字(也就是十六进制值 0x99 的字节表示十进制的99)。

作者:Builder.com 2007年6月20日

关键字: ORACLE

  • 评论
  • 分享微博
  • 分享邮件
本文译自Builder.com,未经许可请勿转载

Oracle 的 NUMBER 数据类型以一种不寻常的格式存储数字,这种不寻常的格式为二进制编码的十进制数字(也就是十六进制值 0x99 的字节表示十进制的99)。诸如INTEGER 、FLOAT 和DOUBLE 之类的 ANSI 标准数据类型是 NUMBER 数据类型的别名,但是具有额外的限制:INTERGER 数据类型不允许十进制,FLOAT 和 DOUBLE 限制有效数字的个数符合整型值。

IEEE 754标准格式是在大多数计算机操作系统和编程语言中表示实数时最常用的格式。浮点数的内部格式也总是存储为32位(FLOAT)或64位(DOUBLE)的值。

当数据从数据库取到宿主编程语言时,数字必须从一种格式转换成另外一种格式。在转换数字的过程中会有一些小小的精度损失。而且,从一种类型转换成另外一种类型的过程由于有很多值需要转换,因此可能会影响应用程序的性能。

在 Oracle 10g 中,Oracle Call Interface(Oracle 调用接口)、一个字段或者 PL/SQL 变量可以被绑定为BINARY_FLOAT 或BINARY_DOUBLE 数据类型。在转型或转换值时,不需要在这些数据类型之间相互转换就可以在宿主编程语言环境(比如 Java)中使用数据,从而也保留了精度。

这是速度和精度之间的折衷。Oracle 内部数字最高能准确地存储38位十进制有效数字。IEEE 754 浮点数只能存储7位二进制有效数字。IEEE 数字还会“逐渐下溢”问题,因为二进制值通常可以是循环值。例如,0.1在 Oracle 数字表示中是一个精确的值,但是在转换成二进制时却是一个循环值。


本文作者:Scott Stephens已经在Oracle工作了13年有余,他曾经在技术支持、电子商务、市场和软件开发等部门工作。更多Scott Stephens 的 Oracle 技巧,请访问我们的Oracle Dev Tips Library.


责任编辑:李宁

欢迎评论投稿
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章