提问人:longdistancerunner 提问时间:4/14/2023 最后编辑:marc_slongdistancerunner 更新时间:4/14/2023 访问量:37
如何为从C#输入到SQL Server的数据选择数值数据类型和精度?
How to choose numeric datatypes and precision for data input into SQL Server from C#?
问:
我有一个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列定义为,但除此之外,我迷路了。netWeight
Decimal(9,4)
我的编程经验基本上相当于 winging it 和 Googlesearchling,所以我真的不习惯在代码中做这样的计算。如何选择最佳数据类型、精度等,以最大程度地减少随时间推移累积的舍入误差,并在 SQL Server 数据库中实现准确的计算?
交易量计算最终将乘以数据库中的价格,因此这也是需要考虑的事情。
我已经查看了我能找到的关于SQL Server中各种数值数据类型的所有讨论,并阅读了有关货币计算等内容,但我没有找到任何与我类似的直接讨论。Decimal
答:
目前在 .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
评论