首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

太奇怪的有关问题了,1个(64->99)*1加下10个(0.01*1)不等于xx.1

2013-01-02 
太奇怪的问题了,1个(64-99)*1加上10个(0.01*1)不等于xx.1前些天测试人员告诉我订单金额这有问题。测试数据

太奇怪的问题了,1个(64->99)*1加上10个(0.01*1)不等于xx.1
前些天测试人员告诉我订单金额这有问题。测试数据一订单有一个90的,10个1分的。Price float,count int。

于是我测了下在数据库,第一个90,剩下10个0.01。
SELECT SUM(Price * Count) FROM Orders WHERE OrderID = 201211220002 
结果为 90.1000000000001。
但是前10个0.01,最后一个90。结果正常是 90.1。

我又测了其他数,64-99都会出现这问题。其他正常。

虽然我在程序里控制金额显示。但是数据库这问题太奇怪了。太奇怪的有关问题了,1个(64->99)*1加下10个(0.01*1)不等于xx.1
[解决办法]
float是非精确数据类型,所以最好要先限定小数位再运算
[解决办法]
float [ ( n ) ]
其中 n 为用于存储 float 数值尾数的位数(以科学记数法表示),因此可以确定精度和存储大小。如果指定了 n,则它必须是介于 1 和 53 之间的某个值。n 的默认值为 53。

n value  精度  存储大小  
1-24 
 7 位数
 4 字节
 
25-53 
 15 位数
 8 字节
 
这些是联机丛书上的,也就是说如果你float不指定n,那默认会精确到15位
[解决办法]
有类似情况,单价为float,特别是拆分的物品(如药品中的片剂)拆分后的单价在做计算时先decimal或numeric限定小数位数

热点排行