【问题标题】:How can SQLServer represent 0.2 as FLOATSQLServer如何将0.2表示为FLOAT
【发布时间】:2013-06-18 09:34:26
【问题描述】:
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.2 是一个十进制常量。 0.2E0 是一个浮点常量。它不会影响问题thoguh

标签: sql-server floating-point computer-science floating-accuracy


【解决方案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

【讨论】:

  • 那么它将实际存储什么来表示这个?是否使用base 2?
  • 所以它将存储10 (b2) 代表2 (b10)1 (b2) 代表1 (b10)小数 点移1 位?
  • @ElRonnoco:浮点使用尾数和指数。所以0.2(b10) 将是2(b10) 的尾数和-1(b10) 的指数。或2 times (10 to power of -1)。但是在二进制等价物中,无论如何。所以0.2(b10) 将被存储为x(b2) times (2 to power of y(b2))
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2014-06-28
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多