日期:2014-05-18  浏览次数:20529 次

100分,关于float字段保留小数的问题
我当前有一个表Table1,一个字段Price(float类型)

我尝试插入一些数据

insert   into   table1   values(123)     数据库里显示是123.0
insert   into   table1   values(123.456)   数据库里显示是123.456
insert   into   table1   values(123.4561)   数据库里显示是123.45610000000001

这就真的是奇怪了。当我插入不同的数据,它有时候是原样显示,有的时候给我在后面加上一大串莫名其妙的小数。

问题1:为什么会出现这种现象,有何规律吗?
====================================================================

我尝试用round来截取,但也不行
insert   into   table1   values(round(123.456789,2))   结果它竟然显示的是123.459999999999!我彻底晕了

问题2:我怎么样做到,在向一个float字段插入数据时,只保留2位小数,其它多余的小数全部截断?(123.456789显示的是123.46)

Ps:数据库字段float为固定,不能修改为decimal等其它类型


------解决方案--------------------
Price为什么不用Money类型?


------解决方案--------------------
float类型就是这样的,不影响你的数据,你可以在读出来的时候转换为你想要的格式.
------解决方案--------------------
建议LZ使用 Decimal 数据类型,这个类型从名字看就比较直观

比如
Decimal(12,2)
代表整数位是12位,小数位2位

------解决方案--------------------
它竟然显示的是123.459999999999!

这个没关系的~交回后台时会变回去的
------解决方案--------------------
select convert(varchar(20),cast(price as money),0) 转换后,price 转换前 from table1
------解决方案--------------------
用numeric(10,2)格式吧
------解决方案--------------------
可以用varchar()类型的
------解决方案--------------------
我当前有一个表Table1,一个字段Price(float类型)

建议使用decimal(10,2)类型