Oracle用一种不常用的NUMBER数据类型来存储数据,该类型使用BCD码(用16进制
0x99来代表十进制的99)。ANSI标准数据类型,比如INTEGER,FLOAT,以及DOUBLE都是NUMBER数据类型的别名。INTEGER数据类型不支持十进制,FLOAT,以及DOUBLE来约束数据以满足整数类型的数据。
IEEE 754 标准格式是绝大多数计算机操作系统和程序设计中最为普通的格式。浮点型数据的内部格式通常存储为32位(浮点型)或者64位(双精度型)。
当数据从数据库传递到开发语言环境时,数据需要从一种格式转化为其它的格式。当进行数据转换时,有可能造成数据精度上的丢失。同样,数据从一种类型转换为另一种类型的过程也会影响程序的性能,因为大范围的数据需要转换。
在Oracle 10g中,Oracle调用接口(Oracle Call Interface),一个列,或者PL/SQL变量都可以使用BINARY_FLOAT或BINARY_DOUBLE数据类型。在开发环境中,比如Java,这些数据类型之间不需要进行数据的转换。
而这其中的过程是以运行速度与精度作为交换的。Oracle内部数据能够精确地存储38个数字。IEEE 754浮点型数据只能以二进制存储7个数字,而且IEEE数据也存在“逐渐下溢(gradual underflow)”的问题,因为二进制数据通常是一些重复的数字。比如,0.1在Oracle是一个准确的数据,但当它转化为二进制时会出现很多重复的数字。