如何为从C#输入到SQL Server的数据选择数值数据类型和精度?

How to choose numeric datatypes and precision for data input into SQL Server from C#?

提问人:longdistancerunner 提问时间:4/14/2023 最后编辑:marc_slongdistancerunner 更新时间:4/14/2023 访问量:37

问:

我有一个C# Windows Form UI,它使用NI VISA控制串行仪器(数字秤),我正在尝试找出在SQL Server数据库中格式化输出以跟踪结果的最佳方法。该秤用于称量各种液体,UI 使用如下函数计算体积:

private Decimal GetVolume(string liquid)
{
    Decimal density = 0;
    string match = Regex.Match(netWeight, @"\d+\.*\d*").Value;
    Decimal weight = Convert.ToDecimal(match);

    switch (liquid)
    {
        case "Liquid 1":
            density = 1.00M;
            break;

        case "Liquid 2":
            density = 1.23M;
            break;
    }

    return weight / density;
}

其中 是刻度的字符串输出。该秤仅精确到0.1g,密度为0.01 g/mL。我试图尽可能避免舍入错误,因为随着时间的推移会跟踪总液体使用量,我不确定做这种事情并将其存储在数据库中的最佳实践是什么。现在,我将卷的SQL Server列定义为,但除此之外,我迷路了。netWeightDecimal(9,4)

我的编程经验基本上相当于 winging it 和 Googlesearchling,所以我真的不习惯在代码中做这样的计算。如何选择最佳数据类型、精度等,以最大程度地减少随时间推移累积的舍入误差,并在 SQL Server 数据库中实现准确的计算?

交易量计算最终将乘以数据库中的价格,因此这也是需要考虑的事情。

我已经查看了我能找到的关于SQL Server中各种数值数据类型的所有讨论,并阅读了有关货币计算等内容,但我没有找到任何与我类似的直接讨论。Decimal

C# SQL Server 精确 SQLDataTypes

评论

0赞 4/14/2023
请参阅 stackoverflow.com/questions/4523741/...或使用 Decimal

答:

0赞 user2618529 4/14/2023 #1

目前在 .NET 中没有 BigDecimal 的实现。只有 BigInteger 表示形式。您可以将无限精度的实数实现为带有基于 BigInteger 的分子和分母的分数。但我认为十进制足以完成您的任务。

Microsoft的文档:https://learn.microsoft.com/en-us/dotnet/api/system.numerics.biginteger?view=net-7.0

例如,我的 BigInteger(参见 UnlimitedInteger):https://github.com/DmitriySidyakin/Blog-BitMath/blob/main/BitMath/UnlimitedInteger.cs