在 C# 和 SQL Server 中,我应该使用哪些类型来表示百分比?
Posted
技术标签:
【中文标题】在 C# 和 SQL Server 中,我应该使用哪些类型来表示百分比?【英文标题】:What types should I use to represent percentages in C# and SQL Server? 【发布时间】:2010-09-14 14:38:54 【问题描述】:我在想花车。作为记录,我也在使用 NHibernate。
【问题讨论】:
【参考方案1】:这取决于您需要的准确度。如果您不需要任何小数位,您甚至可以使用 tiny int。但是,如果您需要一些小数位,通常浮点数是好的。我使用 LLBLGen 并为 %'s 浮动
【讨论】:
【参考方案2】:decimal
你不会因为四舍五入而失去精度。
【讨论】:
稍后遇到这个问题,我发现这个答案对 WRT 问题的 SQL Server 部分更有帮助:***.com/questions/158966/…。看起来答案是 CLR 类型的小数和 SQL Server 类型的浮点数,至少如果您可能存储小数百分比。 由于信息四舍五入,这个答案似乎是错误的:当然四舍五入总是会导致精度损失,即使是十进制也是如此。【参考方案3】:答案取决于应用程序。
其他人指出,在表示精确值方面,十进制比浮点更好。但有时最好使用浮点数来提高精度(例如,一组计算得出的权重加起来为 100% 可能更好地表示为浮点数)
【讨论】:
【参考方案4】:这在很大程度上取决于您需要多少精度;最重要的是要保持一致和清晰。采取预防措施以确保您在整个字段的使用中保持一致。即不要将其存储为浮点数 (n = .5),然后尝试在代码的另一部分将其重构为整数(mypercentage = n/100)。只要您确保不这样做,并且您不是在制造需要 30 位有效数字精度的激光器,只需在 int、double 或您的船 float 之间选择您最喜欢的风格。瓦卡瓦卡。
【讨论】:
【参考方案5】:关于 SQL Server,我很少存储百分比。 10 次中有 9 次您希望存储用于导出百分比并根据需要进行计算的数据。
当且仅当您的经验数据显示计算速度太慢时,请继续存储它。按照之前的建议使用小数以避免四舍五入问题。
【讨论】:
这可能是特定于域的。很多时候你不会有计算百分比的数据,例如用户输入要使用的颜色的百分比 正如@mattlant 所说,我需要存储的百分比是域百分比,例如 17.5% 增值税和 40% 折扣等。【参考方案6】:这取决于您使用它们的目的。
如果用于显示,int 就可以了,而且比浮点数更快。如果是用于不经常使用的数学,则 int 仍然可以正常工作(或者在任何一种情况下都可以使用短整数)。
如果您要进行大量数学运算,那么从性能角度来看,浮点数可能是最好的。
当然,除非您对百分比进行大量操作,否则考虑到现代处理器的速度,最终在性能方面并不重要。
编辑:当然,'int' 假设您只是使用严格的整数百分比。如果不是,那么使用 float 或 dec 总是会更好。
【讨论】:
这个问题没有问关于 int vs float... 你还说 int 更快,但又说浮点数对性能更好。 @StuartBranham:如果你注意到了,我给出了这两种情况都成立的情况。百分比可以存储为 int(75,表示 75%)或 float(0.75 表示 75%,或 75.5 表示 75.5%,或 .755 表示 75.5%)。对于简单的存储和显示,int 更快。如果您需要处理数字,最好使用浮点数 - 您可以存储小数位,并且内置数学函数使其非常高效。以上是关于在 C# 和 SQL Server 中,我应该使用哪些类型来表示百分比?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中使用 SQL Server 2014 保存和检索 XML 数据
如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?
C# 中的 SQL Server Express 连接字符串错误
从 C# 将 byte[] 保存到 SQL Server 数据库中