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

C#传递Decimal参数至SQL Server存储过程时精度异常问题排查

解决C#向SQL Server存储过程传递Decimal精度丢失问题

问题根源

  1. C#字面量类型问题:代码中Value = 25.631230是double类型(二进制浮点数),这类数无法精确表示部分十进制小数,25.631230转成double后实际是25.631229999999999,传递到SQL Server时就会保留这个不精确值。
  2. SQL Server参数定义不明确:存储过程中@latitude decimal未指定精度和小数位数,默认是decimal(18,0),虽然不会截断小数,但无法修正传递过来的精度误差。

解决方案

  • 修改存储过程参数定义:根据经纬度的精度需求,显式指定小数位数(比如保留6位小数,对应米级精度):
    @latitude decimal(10,6)
    
  • C#中使用decimal类型赋值:给小数字面量加上M后缀,让它成为C#的decimal类型(十进制浮点数,无精度损失):
    SqlParameter lat = new SqlParameter 
    { 
        SqlDbType = System.Data.SqlDbType.Decimal, 
        Value = 25.631230M, 
        ParameterName = "@latitude"
    };
    
  • 可选:显式设置SqlParameter的精度:为了和SQL Server参数保持一致,可额外指定Precision和Scale:
    SqlParameter lat = new SqlParameter 
    { 
        SqlDbType = System.Data.SqlDbType.Decimal, 
        Value = 25.631230M, 
        ParameterName = "@latitude",
        Precision = 10,
        Scale = 6
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:25:22