今天编码发现 c# 传 float 1.03 到 SQL SERVER 2008 float 参数类型,用 SQL Server Profiler 查看,变成了 1.0299999713897705
以前以为有效数字位数超了,或者小数位数超出了最大表示范围才会出现,这次算是长见识了。
原因:SQL Server 的 float 类型对应 c# 的 double 类型, float 强转 double 类型是不行的,会造成数据丢失或结果错误
写个段c#代码验证:
void Main() { float a = 1.03F; double b = a; b.Dump(); }
果然:
1.02999997138977