gpt4 book ai didi

sharepoint - 我应该使用 Sharepoint Number 列类型来存储货币值吗?

转载 作者:行者123 更新时间:2023-12-03 18:11:21 26 4
gpt4 key购买 nike

在 SharePoint 中,我可以创建“数字”类型的列表列。我需要存储货币金额,并希望能够使用此列类型,而不必创建新的列类型。

这种类型的值是否由 SharePoint 存储和操作(例如,在对 ListView 中的值求和时)以防止精度损失(即不是某种近似浮点类型)?

我查看了货币列,但它们似乎强制显示在我的应用程序中没有意义的货币单位(我怀疑它们在引擎盖下存储为“数字”)。

最佳答案

虽然不是决定性的,但根据以下测试,SharePoint 似乎以适合货币计算的方式处理数字(至少对于 WSS 3.0/SQL Server 2005),即使它们是近似存储的。但是,超过 15 位有效数字的值可能会出现舍入错误:

货币存储和检索测试

三个数字列(FirstSecondThird)分别包含 3.7、3.65 和 0.05(来自 here 的 .Net 示例)和计算列(返回单行文本),公式如下:=IF(First=Second+Third,"Success","Failure")。查看列表时,计算列显示成功

金钱计算测试

带有公式 =0.1+0.1+0.1=0.3 的是/否计算列(来自 here 的 .Net 示例)。查看列表时,计算列显示

货币存储和计算测试I

在名为 TestList 的列表中,自定义数字列 (CustomNumber) 包含 304253.3251(来自 Microsoft White Paper 的 SQL Server 示例)。这存储在数据库表 AllUserData 中,列 float1 类型为 float (SQL Server 2005)。 float 是一种近似数据类型。

运行以下查询:

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

给出以下结果:

CustomNumber
304253.32510000002

CustomNumber
304253.3251

使用公式 =CustomNumber*100000000000 创建一个计算列,这可能会显示 30425332510000002 的不正确值,但实际上 显示了正确的(来自用户的透视)30,425,332,510,000,000.00000 的值。我假设此行为是由于代码从数据库中读取 float 值执行转换为 numeric 具有适当小的小数位数并操纵内存中的值使用 .Net Decimal 类型。

suggestions ,但是,在 SQL Server 2000 上,计算错误可能会在这种情况下出现,因为 float 值的行为已在版本之间发生变化。

货币存储和检索测试 II

根据先前测试的结果,将以下值添加到 CustomNumber 列:9999999999999999。

这个 16 位有效数字的值在列表(和编辑) View 中错误地显示为 10,000,000,000,000,000(使用 15 位数字的值正确显示)。

检查 AllUserData 表显示该值在数据库中存储不正确并运行以下查询:

DECLARE @f FLOAT
SET @f = 9999999999999999
SELECT CAST(@f as NUMERIC(20, 0))

给出结果:

10000000000000000

这表明 SQL Server 在插入时四舍五入数字。

关于sharepoint - 我应该使用 Sharepoint Number 列类型来存储货币值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1687651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com