Should I use Sharepoint Number column types to store monetary values?
在SharePoint中,我可以创建"数字"类型的列表列。我需要存储货币量,并且希望能够使用此列类型,而不必创建新的列类型。
此类型的值是否由SharePoint存储和操作(例如,在列表视图中求和值时)以防止精度损失(即,不是某种近似的浮点类型)?
我看过货币栏,但它们似乎强制显示在我的应用程序中没有意义的货币单位(我怀疑它们是作为"数字"存储在引擎盖下)。
虽然不是决定性的,但根据以下测试,SharePoint似乎以适合货币计算的方式处理数字(至少使用WSS 3.0/SQL Server 2005),即使这些数字大约存储在一起。然而,超过15个有效数字的值可能显示舍入误差:
存钱和取钱测试
三列数字列(
资金计算测试
一个有公式
存钱计算测试一
在名为
运行以下查询:
1 2 3 4 5 6 7 8 9 10 | DECLARE @ListName UNIQUEIDENTIFIER SET @ListName = (SELECT tp_Id FROM AllLists WHERE tp_Title = 'TestList') SELECT CAST(float1 as NUMERIC(18, 11)) AS CustomNumber FROM AllUserData WHERE tp_ListId = @ListName SELECT float1 AS CustomNumber FROM AllUserData WHERE tp_ListId = @ListName |
给出以下结果:
1 2 3 4 5 | CustomNumber 304253.32510000002 CustomNumber 304253.3251 |
用公式
但是,有人建议,在SQL Server 2000上,在这种情况下可能会出现计算错误,因为版本之间的
存钱和取钱测试二
根据上一次测试的结果,将以下值添加到
此16位有效数字值在列表(和编辑)视图中错误地显示为1000000000000000(使用15位数字的值正确显示)。
检查
1 2 3 | DECLARE @f FLOAT SET @f = 9999999999999999 SELECT CAST(@f as NUMERIC(20, 0)) |
给出结果:
1 | 10000000000000000 |
这说明SQL Server正在对插入的数字进行舍入。
数字就是这样使用的,是的。在求和值时,不应该有任何精度损失的问题。