Chinaunix首页 | 论坛 | 博客
  • 博客访问: 796422
  • 博文数量: 247
  • 博客积分: 166
  • 博客等级: 入伍新兵
  • 技术积分: 2199
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 16:10
文章分类

全部博文(247)

文章存档

2017年(1)

2015年(63)

2014年(80)

2013年(94)

2012年(9)

分类: Mysql/postgreSQL

2013-05-28 13:13:41

发现一个比较奇怪的问题,浮点数在被搜索出来之后,有时就是本来的数值,比如5.3就显示5.3,有时却会有一个超级长的小数点尾巴,比如写入的1.87,输出搜寻结果时却变成了1.87695320004777

可能做程序的人都知道,float类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理。这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12.
幸好mysql提供了两个数据类型:numeric和decimal,这两种数据类型可以轻松解决上面的问题:
NUMERIC 和 DECIMAL 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例 如:

salary DECIMAL(5,2)

在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -99.99 到 99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。

译者注:

M 与D 对DECIMAL(M, D) 取值范围的影响
可以通过mysql的FORMAT(X,D)就可以控制数据X的小数点为D位了 

以下是mysql 5.1的参考手册(函数和操作符)的链接地址

http://dev.mysql.com/doc/refman/5.1/zh/functions.html

阅读(6254) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~