DECLARE @f as float
SELECT @f = 0.2
SELECT @f
上面的代码返回
----------------------
0.2
(1 row(s) affected)
那里并不奇怪。除了浮点数不能0.2
准确表示。
那么 SQLServer 在这里做什么呢?它是否使用以 10 为底的浮点数?我的理解是它总是处理以 2 为底的浮点数(因为以 10 为底的浮点数基本上是DECIMAL
?)。
它在做一些四舍五入吗?
DECLARE @f as float
SELECT @f = 0.2
SELECT @f
上面的代码返回
----------------------
0.2
(1 row(s) affected)
那里并不奇怪。除了浮点数不能0.2
准确表示。
那么 SQLServer 在这里做什么呢?它是否使用以 10 为底的浮点数?我的理解是它总是处理以 2 为底的浮点数(因为以 10 为底的浮点数基本上是DECIMAL
?)。
它在做一些四舍五入吗?
float
精确到 15 位有效数字,因此0.2
通常会显示为0.2
您的链接中提到的技术可以减轻(但可能不会消除)这样的值的精度损失
但是数字越大,精度就会丢失
DECLARE @f as float
SELECT @f = 0.1234567890123456E0
SELECT @f
SELECT @f = 1.000000000000023E0
SELECT @f