数字、浮点和十进制数据类型之间的区别是什么?在哪些情况下应该使用哪种数据类型?

对于任何类型的财务交易(例如工资领域),哪一个是首选的,为什么?


当前回答

不是一个完整的答案,但一个有用的链接:

“我经常用十进制数值来计算。在某些情况下,在进行任何计算之前立即将十进制值转换为浮点值,可以获得更好的精度。”

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

其他回答

不是一个完整的答案,但一个有用的链接:

“我经常用十进制数值来计算。在某些情况下,在进行任何计算之前立即将十进制值转换为浮点值,可以获得更好的精度。”

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

Decimal具有固定精度,而float具有可变精度。

EDIT (failed to read entire question): Float(53) (aka real) is a double-precision (64-bit) floating point number in SQL Server. Regular Float is a single-precision (32-bit) floating point number. Double is a good combination of precision and simplicty for a lot of calculations. You can create a very high precision number with decimal -- up to 136-bit -- but you also have to be careful that you define your precision and scale correctly so that it can contain all your intermediate calculations to the necessary number of digits.

Float是近似值数据类型,这意味着不是数据类型范围内的所有值都可以精确表示。

Decimal/Numeric是固定精度数据类型,这意味着数据类型范围内的所有值都可以精确地表示为精度和比例。你可以用十进制来省钱。

从Decimal或Numeric转换为float可能会导致一些精度损失。对于Decimal或Numeric数据类型,SQL Server将精度和比例的每个特定组合视为不同的数据类型。DECIMAL(2,2)和DECIMAL(2,4)是不同的数据类型。这意味着11.22和11.2222是不同的类型,尽管float不是这样。对于FLOAT(6), 11.22和11.2222是相同的数据类型。

也可以使用money数据类型来省钱。这是原生数据类型与4位精度的钱。为了省钱,大多数专家更喜欢这种数据类型。

参考 1 2 3.

虽然这个问题不包括MONEY数据类型,但有些人可能会想使用MONEY数据类型进行财务计算。

注意MONEY数据类型,它的精度有限。

在这个Stackoverflow问题的答案中有很多关于它的好信息:

在SQL Server中应该选择MONEY还是DECIMAL(x,y)数据类型?

它们的数据类型优先级不同

Decimal和Numeric在功能上是相同的,但仍然有数据类型优先级,这在某些情况下可能是至关重要的。

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')

结果数据类型是数值型,因为它具有数据类型优先级。

按优先级列出的详尽数据类型列表:

参考链接