You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SQL Server中float类型ROUND(50.9685,3)舍入异常?如何解决?

SQL Server中ROUND(float)结果不符合预期的原因及解决方法

原因

  • float是近似数值类型,通过二进制编码存储数据,无法精确表示所有十进制小数。当执行CAST(50.9685 as float)时,实际存储的是一个略小于50.9685的近似值(类似50.96849999999999...),对这个近似值做ROUND(...,3)运算时,自然得到50.968而非预期的50.969。
  • decimal(10,5)属于精确数值类型,可以精准存储十进制小数50.9685,因此ROUND运算的结果完全符合预期。

解决方法

  • 核心方案:优先使用精确数值类型(decimal/numeric)替代float处理需要精确小数的场景,从根源避免近似值带来的计算误差。
  • 特殊场景处理:如果必须使用float,可先将其转换为精确数值类型后再执行ROUND操作,示例语句:
    SELECT ROUND(CAST(CAST(50.9685 as float) as decimal(10,5)), 3) AS Col1 INTO #Test
    

内容的提问来源于stack exchange,提问作者Sergey Alikin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:48:07