保持百分比值的最佳数据类型是0.00%到100.00%?
答案 0 :(得分:102)
假设您的百分比有两个小数位,您使用的数据类型取决于您计划存储百分比的方式。如果你要存储它们的小数当量(例如100.00%存储为1.0000),我会将数据存储在decimal(5,4)
数据类型中,其CHECK
约束确保值不会超过1.0000(假设这是上限,永远不会低于0(假设是下限)。如果您要存储其面值(例如,100.00%存储为100.00),则应使用decimal(5,2)
并使用适当的CHECK
约束。结合良好的列名称,它使其他开发人员清楚地知道数据是什么以及数据如何存储在列中。
答案 1 :(得分:19)
decimal
。columnName decimal(precision, scale)
中的两个值。精度表示数字中可以保存的总位数,刻度表示其中有多少位于小数位后,因此decimal(3,2)
是一个可以表示为#.##
的数字; decimal(5,3)
将是##.###
。decimal
和numeric
基本上是一回事。但是decimal
符合ANSI标准,因此除非另有说明(例如,通过贵公司的编码标准),否则请始终使用它。示例场景
decimal(5,4)
。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)
)
进一步阅读:
答案 2 :(得分:3)
我同意Thomas的意见,我会选择DECIMAL(5,4)解决方案至少用于WPF应用程序。
查看MSDN数字格式字符串以了解原因: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
百分比(" P")格式说明符将数字乘以100并将其转换为表示百分比的字符串。
然后你就可以在你的XAML代码中使用它了:
DataFormatString="{}{0:P}"
答案 3 :(得分:2)
如果2个小数位是你的精度水平,那么“smallint”将在最小的空间(2个字节)中处理这个。您存储百分比乘以100。
编辑:decimal类型可能是更好的匹配。那你就不需要手动缩放了。每个值需要5个字节。
答案 4 :(得分:0)
使用数字(n,n),其中n具有足够的分辨率以舍入到1.00。例如:
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)