持有百分比值范围从0.00%到100.00%的最佳数据类型是什么?

有帮助吗?

解决方案

假设您的百分比有两个小数点,则使用的数据类型取决于您计划如何存储百分比。如果您要存储它们的分数等效物(例如存储为1.0000),我会将数据存储在一个 decimal(5,4) 数据类型 CHECK 确保值永远不超过1.0000(假设是盖子)并且永远不会低于0(假设是地板)的约束。如果您要存储其面值(例如100.00%存储为100.00),则应使用 decimal(5,2) 适当 CHECK 约束。结合一个良好的列名,它向其他开发人员清楚地清楚了数据是什么以及如何将数据存储在列中。

其他提示

  • 作为一个 decimal.
  • 如果要限制范围(例如0%至100%;在某些情况下,可能有正当理由超出100%或可能陷入否定的情况)。
  • 将值1视为100%,0.5为50%等。这将使任何数学操作都可以按预期运行(即使用100%为100%)。
  • 根据需要修改精度和比例(这是括号中的两个值 columnName decimal(precision, scale). 。精确表明可以在数量中持有的数字总数 decimal(3,2) 是可以表示为 #.##; decimal(5,3) 将会 ##.###.
  • decimalnumeric 本质上是同一件事。然而 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)
    )

进一步阅读:

我同意托马斯的观点,至少对于WPF应用程序,我会选择十进制(5,4)解决方案。

看看MSDN数字格式字符串,以了解为什么:http://msdn.microsoft.com/en-us/library/dwhawy9k#pformattring

百分比(“ P”)格式指定符将数字乘以100,并将其转换为代表百分比的字符串。

然后,您将能够在XAML代码中使用它:

DataFormatString="{}{0:P}"

如果您的精度是2个小数位置,则“小”将在最小空间(2个bytes)中处理。您将百分比乘以100。

编辑: 小数 类型可能是更好的匹配。那么您就不需要手动扩展。每个值需要5个字节。

使用数字(n,n),其中n具有足够的分辨率到1.00。例如:

declare @discount numeric(9,9)
    , @quantity int
select @discount = 0.999999999
    , @quantity = 10000

select convert(money, @discount * @quantity)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top