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
相关产品推荐
相关产品推荐

