用于保存百分比值的适当数据types?
保持百分比值从0.00%到100.00%的最佳数据types是什么?
假设你的百分比有两位小数,你使用的数据types取决于你计划如何存储你的百分比。 如果你打算存储它们的小数部分(例如100.00%存储为1.0000),我会将数据存储在带有CHECK
约束的decimal(5,4)
数据types中,以确保值不超过1.0000(假设帽),从不低于0(假设是地板)。 如果要存储其面值(例如,100.00%存储为100.00),则应该使用具有适当CHECK
约束的decimal(5,2)
。 结合一个好的列名,它使其他开发人员清楚数据是什么以及数据如何存储在列中。
- 保持为
decimal
。 - 如果你想限制范围(例如0到100%之间;在某些情况下可能有正当的理由超过100%,甚至潜在的负面),添加检查约束。
- 将数值1视为100%,将数值0.5视为50%等。这将允许任何math运算按照预期发挥作用(即,相对于将数值100作为100%)。
- 根据需要修改精度和缩放比例(这些是括号中的两个数值
columnName decimal(precision, scale)
。精度表示可以在数字中保留的位数的总数,scale表示在小数点后面有多less个数字,decimal(3,2)
是一个可以表示为#.##
;的decimal(5,3)
是##.###
。 -
decimal
和numeric
本质上是相同的东西。 但是,decimal
是ANSI兼容的,所以总是使用,除非另有说明(例如,由您公司的编码标准)。
示例场景
- 对于你的情况(0.00%至100.00%),你想要
decimal(5,4)
。 - 对于最常见的情况(0%到100%),你想要
decimal(3,2)
。 - 在上述两个中,检查约束都是一样的
例:
if object_id('Demo') is null create table Demo ( Id bigint not null identity(1,1) constraint pk_Demo primary key , Name nvarchar(256) not null constraint uk_Demo unique , SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1) , SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1) )
进一步阅读:
- 小数位数和精度: http : //msdn.microsoft.com/zh-cn/library/aa258832%28SQL.80%29.aspx
-
0 to 1
与0 to 100
: C#:存储百分比,50或0.50? - 小数对数字: SQL Server中DECIMAL和NUMERIC有什么区别吗?
如果2位小数是你的精度级别,那么“smallint”将在最小的空间(2字节)中处理。 您存储的百分比乘以100。
编辑: 十进制types可能是一个更好的匹配。 那么你不需要手动缩放。 每个值需要5个字节。
我同意托马斯和我会selectDECIMAL(5,4)至less为WPF应用程序的解决scheme。
看看MSDN数字格式string知道为什么: http : //msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
百分比(“P”)格式说明符将数字乘以100,并将其转换为表示百分比的string。
那么你可以在你的XAML代码中使用它:
DataFormatString="{}{0:P}"
使用数字(n,n),其中n有足够的分辨率可以舍入到1.00。 例如:
declare @discount numeric(9,9) , @quantity int select @discount = 0.999999999 , @quantity = 10000 select convert(money, @discount * @quantity)