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

我就是大神 2012-11-22 10:43:59
前些天测试人员告诉我订单金额这有问题。测试数据一订单有一个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都会出现这问题。其他正常。

虽然我在程序里控制金额显示。但是数据库这问题太奇怪了。
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2012-11-22
  • 打赏
  • 举报
回复
有类似情况,单价为float,特别是拆分的物品(如药品中的片剂)拆分后的单价在做计算时先decimal或numeric限定小数位数
發糞塗牆 2012-11-22
  • 打赏
  • 举报
回复
float [ ( n ) ] 其中 n 为用于存储 float 数值尾数的位数(以科学记数法表示),因此可以确定精度和存储大小。如果指定了 n,则它必须是介于 1 和 53 之间的某个值。n 的默认值为 53。 n value 精度 存储大小 1-24 7 位数 4 字节 25-53 15 位数 8 字节 这些是联机丛书上的,也就是说如果你float不指定n,那默认会精确到15位
發糞塗牆 2012-11-22
  • 打赏
  • 举报
回复
float是非精确数据类型,所以最好要先限定小数位再运算

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧