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

SQL Server减法精度异常求助:如何获取精确到3位小数的0.005结果

解决SQL Server浮点数计算精度误差问题

嘿,这个问题我太熟了——这是浮点数近似存储带来的经典精度坑!SQL Server里的float/real类型属于近似数值类型,它们用二进制存储十进制数时,没法精确表示像0.005这类小数(就像十进制没法精确表示1/3一样),所以计算时会出现微小的偏差,也就是你看到的0.004999999999545。

要得到准确的0.005,你可以试试这几种方案:

  • 根治方案:改用精确数值类型
    如果可以修改表结构,把A、B列的数据类型改成decimal(precision, scale)(比如decimal(10,3),其中10是总位数,3是小数位数,可根据你的实际数据调整)。decimal/numeric是精确数值类型,能完美存储十进制小数,之后直接执行SELECT A-B FROM P就能得到准确的0.005。
    如果没法改表结构,就在查询时临时转换类型:

    SELECT CAST(A AS DECIMAL(10,3)) - CAST(B AS DECIMAL(10,3)) FROM P
    
  • 临时查询方案:对结果四舍五入
    如果你必须保留原表的浮点数类型,那就对计算结果进行四舍五入,指定保留3位小数:

    SELECT ROUND(A-B, 3) FROM P
    

    要是担心结果还是显示浮点数的微小偏差,可以再转成decimal类型:

    SELECT CAST(ROUND(A-B, 3) AS DECIMAL(10,3)) FROM P
    
  • 备选方案:用STR函数格式化后转换
    STR函数可以把数值转成指定小数位数的字符串,再转成数值类型也能得到准确结果:

    SELECT CAST(STR(A-B, 10, 3) AS DECIMAL(10,3)) FROM P
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:15:29