提问人:Sergey Alikin 提问时间:6/21/2023 最后编辑:A-TechSergey Alikin 更新时间:6/22/2023 访问量:78
为什么浮点类型会将 .5 四舍五入到 0,我该如何避免它?[复制]
Why does the float type round .5 to 0 and how can I avoid it? [duplicate]
问:
我有这个声明(SQL Server 2012):
SELECT ROUND(CAST(50.9685 as float), 3) AS Col1 INTO #Test
我希望看到结果“50.969”,但实际上我看到的是“50.968”。 例如,当使用 decimal(10,5) 而不是 float 时,结果将符合预期。
为什么会发生这种情况,我该如何解决这个问题?
答:
1赞
David Browne - Microsoft
#1
这就是为什么使用浮点数是个坏主意的原因。50.9685 作为浮点数不是 50.9685,而是 50.968499999999999000。因此,50.968 是预期值。
评论
float
50.9685
float
50.9685
50.968499999999999000
50.968
float
decimal
SELECT ROUND(50.9685,3)
对我来说效果很好。它不会给出错误。gives arithmetical overflow when CAST it.
最大值为 10^38。你试着存储了什么?使用与数据匹配的精度和小数位数。如果有什么东西失败了,请检查原因。这很可能是坏数据