zt mysql浮点数类型比较

转自http://www.unixcom.cn/thread-3999-1-1.html

MySql支持3个浮点型:float,double,decimal。
float:代表单精度浮点类型。
double:代表双精度浮点数值。
与整数类型一样,这些类型带有附加的参数。一个显示宽度指示器和一个小数点指示器。
eg: float(5,2)则规定显示宽度为5的数字,小数点后面有2位数字。对于小数点后面的数字。
超过了允许的数目时,系统会自动将它四舍五入插入。
eg:

  1. mysql> create table t7 (abc float(5,2));
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql> insert into t7 values(123.456);
  4. Query OK, 1 row affected (0.02 sec)
  5. mysql> select * from t7;
  6. +--------+
  7. | abc |
  8. +--------+
  9. | 123.46 | 
  10. +--------+
  11. 1 row in set (0.03 sec)
复制代码

float和double分别的存储:
float类型的存储方式

而双精度的存储方式为:

double的存储是float精度的一倍。一般对精度要求高才用double。否则为了减少资源的浪费。我们都用float来代替小数。
double:

其中unsigned,zerofile 修饰符也能被float.decimal,double数据类型接受。结果和int整数的一样
详情查看整数:
写一个float类型的unsigned:

对于decimal类型
给定的DECIMAL 类型的取值范围取决于MySQL数据类型的版本。对于MySQL3.23 以前的版本,DECIMAL(M, D) 列的每个值占用M 字节,而符号(如果需要)和小数点包括在M 字节中。因此,类型为DECIMAL(5, 2) 的列,其取值范围为-9.99 到9 9 . 9 9,因为它们覆盖了所有可能的5 个字符的值。

正如MySQL3.23 一样,DECIMAL 值是根据ANSI 规范进行处理的, ANSI 规范规定DECIMAL(M, D) 必须能够表示M 位数字及D 位小数的任何值。

例如, DECIMAL(5, 2) 必须能够表示从-999.99 到999.99 的所有值。而且必须存储符号和小数点,因此自MySQL3.23以来DECIMAL 值占M + 2 个字节。对于DECIMAL(5, 2),“最长”的值(- 9 9 9 . 9 9)需要7个字节。

在正取值范围的一端,不需要正号,因此MySQL数据类型利用它扩充了取值范围,使其超过了ANSI 所规范所要求的取值范围。如DECIMAL(5, 2) 的最大值为9 9 9 9 . 9 9,因为有7 个字节可用。

posted on 2012-07-19 14:51  zhanghw0354  阅读(1229)  评论(0编辑  收藏  举报