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)类型