Oracle中引入了两种新的数据类型:binary_float和binary_double。这两种数据类型是对number数据类型的补充。
Binary_float:存储一个单精度的32位浮点数。
Binary_double:存储一个双精度的64位浮点数。
number 可存储整型、也可存储小数,但存储小数时数据被格式化了,如283038.55803527放在库里可能变成283038.558035270016000,这是拿number(30,15)类型的数据做为例子来说。
他们的优点:
1. 需要的存储空间较小:Binary_float需要5个字节,Binary_double需要9个字节,number需要32个字节。
2. 可以表示的数字范围更大
3. 执行运算的速度更快:binary_float和binary_double类型通常是在硬件中执行运算,而number类型在运算之前首先使用软件进行转换。
4. 运算封装:对binary_float和binary_double类型进行的数学运算是封装的,也就是说结果要么是数字,要么是一个特殊值。
5. 取整透明:binary_float和binary_double类型使用2进制来表示数字,而number则使用十进制来表示。
下面是关于 binary_float和binary_double的4个特殊值
<!-- [if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]-->
特殊值 |
描述 |
Binary_float_nan |
非binary_float 类型的数字 (nan) |
Binary_float_infinity |
Binary_float类型的无穷大 (inf) |
Binary_double_nan |
非binary_double 类型的数字 (nan) |
Binary_double_infinity |
Binary_double类型的无穷大 (inf) |