DECIMAL 与 FLOAT 比较

目录

 

一:一般Java程序中

二:DB2中的单双精度

(1)定义

(2)精确性

(3)性能优势


一:一般Java程序中


Double 与 Float 的区别:
  01.在内存中占有的字节数不同

    单精度浮点数在机内存占4个字节

    双精度浮点数在机内存占8个字节

  02.有效数字位数不同

    单精度浮点数有效数字8位

    双精度浮点数有效数字16位

  03.数值取值范围

    单精度浮点数的表示范围:-3.40E+38~3.40E+38

    双精度浮点数的表示范围:-1.79E+308~-1.79E+308

  04.在程序中处理速度不同

    一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

二:DB2中的单双精度


(1)定义


REAL:单精度浮点 32位  近似值 可以是零,或者可以从-3.4028234663852886e + 38到-1.1754943508222875e-38或者从1.1754943508222875e-38到3.4028234663852886e + 38。

DOUBLE或FLOAT:双精度浮点 64位  近似值。该数字可以是零,或者可以从-1.7976931348623158e + 308到-2.2250738585072014e-308,或者从 2.2250738585072014e-308到1.7976931348623158e + 308。

(2)精确性


REAL 和 DOUBLE,只是通过二进制近似方式来处理十进制数据。
因为二进制只能表示2的n次方的数,n可以取负值,3.3无法用2的n次方的数组合计算出来,所以无法精确表示:3.3=1*2+1*1+0*1/2+1*1/4+0*1/8+0*1/16+1*1/32+...


DECFLOAT 它是一种十进制浮点数据类型,适合处理精确的十进制业务数据
浮点数据类型例如 REAL 和 DOUBLE 类型都只是通过二进制近似方式来处理十进制数据
DECFLOAT可选DECFLOAT(16)和DECFLOAT(34),其意义为:DECFLOAT(34)可存储整数位和小数位的长度之和和为34的小数,超长则从小数位截断,对于整数也是可存34位的纯整数,超长则截断34位之后的补零并转换为幂值:


(3)性能优势


 FLOAT 类型更具性能优势,数据体积更小
特性:DECIMAL会对存储的数据自动补0,补多少取决于定义时的大小

例子:
1.1760913  (float,double)
1.1760913000000000 (DECIMAL(30,16))

在亿级别的数据流转中,多余的 0  会极大的影响数据传输,
增多不必要的 “0” 的读写操作

发布了206 篇原创文章 · 获赞 22 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_39966065/article/details/99763367