sql server 乘法 丢失精度问题

jldzy 2015-01-14 01:36:35
现在有一张表tba(pric, nav ,factor)

select pric, nav ,factor, pric*factor ---908.880050
from tba

这种在 表查询里面乘法 和 单独拿出来乘结果是不一样的。


--- 908.8800495726000000000
SELECT 1004.3600000000 *0.904934535

一个是 908.880050 一个是 908.8800495726000000000,, 怎么才能保证不丢失精度,即使用 ROUND(,10) 还是没有用。
...全文
755 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
山寨DBA 2015-01-14
  • 打赏
  • 举报
回复
那你就改成这样的,把计算的地方都强制转化一下成float类型:select a.*,cast(a.Price as float) * a.Factor from( select xxxx, cast(运算得出 Factor as float) from yyy ) a
jldzy 2015-01-14
  • 打赏
  • 举报
回复
模式是这样的 select a.*, a.Price * a.Factor from( select xxxx, 运算得出 Factor from yyy ) a
jldzy 2015-01-14
  • 打赏
  • 举报
回复
例子可能的问题,那个 Factor 是 计算出来的,并不是一个字段。
山寨DBA 2015-01-14
  • 打赏
  • 举报
回复
你看看,应该是你表的数据类型定义的问题吧。。。
發糞塗牆 2015-01-14
  • 打赏
  • 举报
回复
用decimal或者numeric来cast每一列的类型及计算后的最终类型,说白了就是把类型统一,如果你的列本来是float型的话,数据存储是不精确的

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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