0
DECLARE @f as float

SELECT @f = 0.2

SELECT @f

上面的代码返回

----------------------
0.2

(1 row(s) affected)

那里并不奇怪。除了浮点数不能0.2准确表示。

那么 SQLServer 在这里做什么呢?它是否使用以 10 为底的浮点数?我的理解是它总是处理以 2 为底的浮点数(因为以 10 为底的浮点数基本上是DECIMAL?)。

它在做一些四舍五入吗?

4

1 回答 1

1

float精确到 15 位有效数字,因此0.2通常会显示为0.2

您的链接中提到的技术可以减轻(但可能不会消除)这样的值的精度损失

但是数字越大,精度就会丢失

DECLARE @f as float

SELECT @f = 0.1234567890123456E0
SELECT @f

SELECT @f = 1.000000000000023E0
SELECT @f
于 2013-06-18T09:51:57.250 回答