2013-02-27 184 views
0

我明白float and real areReal和浮点数的小数长度和准确性

近似数数据类型与浮点数字 数据使用。浮点数据是近似的;因此,不是所有的值都可以精确地表示数据类型范围 。

然而,在下面的例子:

Q1:为什么'浮动()'(即;真实)给出更小数“浮动( )'还不够准确?

Q2:如何存放@s在许多领域,因为它是不四舍五入?

declare @s varchar(50) = '34.770438199999944' 
select convert(float(24), @s) real_, convert(float(53), @s) float_ 

Results(括号内是使DIFF更清晰)

|    real_ |  float_ | 
------------------------------------ 
| 34.77043(9147949) | 34.77043(82) | 

回答

0

Q1。这只是一个显示问题,对于其他数字它可能不同。它将在更适合的地方回合(它将更接近数字的真实近似值)。由于数据存储数量较少,所以精度较低。

Q2。在mssql中(因为标签声明sql-server),你可以创建一个小数,并且你将存储这个数字而不会丢失精确度。但是你可以储存的数量是有限的。

+0

你能解释一下'精度较低,因为它有较少的数据来存储数字'?是关于浮动还是真实? – Kaf 2013-02-27 16:31:50

+0

那么..每个数字或者是浮点数都表示在多个位上。例如1个字节= 8位。它可以保存0到255之间的数字(2^8个数字)。如果你去2个字节的数字,你会有2^16等等。使用浮点数的推理是相似的,但数字不是按原样存储的,而是以2位数字的形式存储的:有效数字和指数。有了这2,你可以近似一个非常大的数字范围。现在float和real用不同的字节数表示。具有更多字节来存储其中的2个数字的浮点可以更准确地保存数据。 – 2013-02-27 17:08:34