选择十进制(x,y)的适当精度

时间:2009-04-30 09:37:29

标签: sql-server database-design

我目前正在重新设计一个在SQL Server 2005上运行的旧数据库,我想用小数替换大多数旧的浮点数。

十进制(15,4)足以满足我的需要,但SQL Server doc表示这将使用相同的存储空间(9字节)作为十进制(19,4)。在相同的存储空间中拥有更大的数字似乎是一个好主意。那么:有什么理由我使用(19,4)的最大精度?性能上的缺点可能呢?请注意,我不会在数据库中进行大量计算,只会在查询中进行一些SUM或乘法。

3 个答案:

答案 0 :(得分:4)

尽管使用相同数量的存储空间,但使用较小数据精度的主要原因是向系统的未来用户传达意义。这也是使用适当数据类型的重要原因 - 例如DECIMAL(15,4)表示数字,钱是钱。

答案 1 :(得分:2)

对于4位小数,如果可以,请使用金钱

原因:它比小数快,但确切

Money, float, decimal文章

编辑:基于评论

有趣的论点。我关注两个博客。

请注意此处的示例:基于数据类型和优先级的不同精度

declare @d decimal(19,4), @ddiv decimal(19,4)

set @d = 12.39
SET @ddiv = 1000

select (@d/@ddiv)*@ddiv, (@d/1000)*1000
--Gives   12.390000    12.390000000

我在这里解答“T-SQL Decimal Division Accuracy

现在,这很有趣。十进制,不同的答案

declare @d decimal(19,4), @ddiv decimal(19,4)

set @d = 12.39
SET @ddiv = 1001

select (@d/@ddiv)*@ddiv, (@d/1001)*1001
--Gives   12.390000    12.389999622

回到金钱:每个人都有相同的答案

declare @d money, @ddiv money

set @d = 12.39
SET @ddiv = 1001

select (@d/@ddiv)*@ddiv, (@d/1001)*1001
--Gives   12.3123    12.3123

道德:存储在SQL中,以客户端语言处理......

答案 2 :(得分:0)

在性能方面,没有理由不使用十进制(19,4)。我个人并不认为使用不同的精度只是为了传达意义"这是有道理的,不仅因为正确的文档(甚至对该领域的评论)会处理这个问题,尤其是因为业务规则确实发生了变化。

如果使用MONEY是首选,请注意潜在的准确性缺陷:https://groups.google.com/forum/?hl=en#!topic/microsoft.public.sqlserver.server/4ZvwaOII3Vs