DECLARE @f as float
SELECT @f = 0.2
SELECT @f
上面的代码返回
----------------------
0.2
(1 row(s) affected)
那里不足为奇。 Except that floating-point cannot represent 0.2
exactly.
那么SQLServer在这做什么?它是否使用基数为10的浮点数?我理解它总是处理基数2中的浮点(因为基数10的浮点基本上是DECIMAL
?)。
它正在进行一些舍入吗?
答案 0 :(得分:1)
float
is accurate to 15 significant figures因此0.2
通常会显示为0.2
链接中提到的技术可以缓解(但可能不会消除)像这样的值的精度损失
但是数字越大,精度就越低
DECLARE @f as float
SELECT @f = 0.1234567890123456E0
SELECT @f
SELECT @f = 1.000000000000023E0
SELECT @f