代码之家  ›  专栏  ›  技术社区  ›  User

保存百分比值的适当数据类型?

  •  79
  • User  · 技术社区  · 14 年前

    保存0.00%到100.00%的百分比值的最佳数据类型是什么?

    5 回复  |  直到 8 年前
        1
  •  153
  •   Thomas    10 年前

    假设百分比有两位小数,则使用的数据类型取决于您计划如何存储百分比。如果要存储它们的分数当量(例如,100.00%存储为1.0000),我会将数据存储在 decimal(5,4) 带有 CHECK decimal(5,2) 以适当的方式 检查 约束。再加上一个好的列名,它可以让其他开发人员清楚地知道数据是什么,以及数据是如何存储在列中的。

        2
  •  33
  •   Community kfsone    7 年前
    • decimal .
    • 如果要限制范围(例如,在0到100%之间),请添加检查约束;在某些情况下,可能有充分的理由超过100%,甚至有可能成为负面因素)。
    • 根据需要修改精度和比例(这是括号中的两个值 columnName decimal(precision, scale) . 精度表示数字中可容纳的总位数,小数位数表示小数点后的位数,所以 decimal(3,2) 是一个可以表示为 #.## decimal(5,3) 会是 ##.### .
    • 十进制的 numeric 本质上是一样的。然而

    示例场景

    • decimal(5,4) .
    • 对于最常见的情况(0%到100%),您希望 十进制(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)
        )
    

    进一步阅读:

        3
  •  4
  •   pjehan    10 年前

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

    http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString

    percent(“P”)格式说明符将数字乘以100,并将其转换为表示百分比的字符串。

    然后您就可以在XAML代码中使用它:

    DataFormatString="{}{0:P}"
    
        4
  •  2
  •   mdma    14 年前

    如果2位小数是您的精度级别,那么“smallint”将在最小的空间(2字节)中处理此问题。将百分比乘以100存储起来。

    decimal 类型可能更匹配。那你就不需要手动缩放了。每个值需要5个字节。

        5
  •  0
  •   user2202942    11 年前

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

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