【问题标题】:Real and float number decimal length and accuracy实数和浮点数小数长度和精度
【发布时间】:2013-02-27 15:53:21
【问题描述】:

我明白float and real are:

用于浮点数值的近似数数据类型 数据。浮点数据是近似的;因此,并非所有值 数据类型范围可以精确表示。

但是,在以下示例中:

Q1:为什么 'float(24)'(即;实数)比 给出更多的小数 em>'float(53)' 但不太准确?

Q2:如何将@s 原样存储在数字字段中而不进行四舍五入?

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

Results(括号是为了让差异更清晰)

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

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    第一季度。这只是一个显示问题,对于其他数字可能会有所不同。它将在更适合的地方四舍五入(它将更接近数字的实际近似值)。精度较低,因为它存储数字的数据较少。

    第二季度。在 mssql 中(如标签所示 sql-server),您可以进行小数化,并且您将存储该数字而不会丢失精度。但是你可以存储的数量是有限的。

    【讨论】:

    • 你能解释一下Less precision because it has less data to store the number in吗?是浮动的还是真实的?
    • 好吧 .. 每个数字,无论是浮点数还是非浮点数都表示为多个位。例如 1 字节 = 8 位。它可以容纳从 0 到 255 的数字(2^8 个数字)。如果你去一个 2 字节的数字,你将有 2^16 等等。浮点数的推理是相似的,但是数字不是按原样存储的,而是实际上存储为 2 个数字:有效数字和指数。使用这个 2,您可以近似一个非常大的数字范围。现在 float 和 real 用不同的字节数表示。有更多字节来存储两个数字的浮点数可以更准确地保存数据。
    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 2010-12-26
    • 2015-07-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多