【问题标题】:fields with decimals - which data type to use?带小数的字段 - 使用哪种数据类型?
【发布时间】:2011-07-08 18:31:25
【问题描述】:

我需要一个带有百分比的字段

25% => 0.25
30% => 0.30

我需要将该字段设置为哪种数据类型?

您如何确定整数字段等小数字段的范围? (例如 tinyint unsigned 是 0-255)

编辑

我需要在查询中进行一些计算

【问题讨论】:

    标签: mysql


    【解决方案1】:

    使用DECIMAL DATATYPE

    DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] 
    

    对于 MySQL 5.0.3 及更高版本:

    压缩的“精确”定点数。米 是总位数( 精度)和 D 是数量 小数点后的位数( 规模)。小数点和(对于 负数)“-”号不是 在 M 中计数。如果 D 为 0,则值有 没有小数点或小数部分。 最大位数 (M) DECIMAL 是 65(从 5.0.3 到 64 5.0.5)。支持的最大小数位数 (D) 为 30。如果 D 是 省略,默认为 0。如果 M 为 省略,默认为 10。

    UNSIGNED,如果指定,则不允许 负值。

    所有基本计算(+、-、*、/) 使用 DECIMAL 列完成 精度为 65 位。​​

    注意:如果您希望该字段的最大值在 0-99.99 之间,请使用

    ALTER TABLE  `table_name` ADD  `percentage` DECIMAL( 5, 2 ) NOT NULL
    

    【讨论】:

      【解决方案2】:

      plethora of MySQL numeric types 中,FLOATREAL 可能是您最好的选择(取决于您存储的内容)。

      【讨论】:

        【解决方案3】:

        您应该使用至少 5 位的 FLOAT 字段

        【讨论】:

        • FLOAT 会引入舍入误差。 MySQL 有固定的小数类型
        【解决方案4】:

        decimal 怎么样? :)

        您甚至可以设置精度:

        CREATE TABLE yourtable ( percentage decimal(10,2) ... ); 
        

        【讨论】:

          【解决方案5】:

          你肯定想要一个DECIMAL 类型; FLOAT 与所有浮点数一样不精确。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-26
            • 2011-12-17
            • 2018-06-11
            • 2010-10-10
            • 2013-11-02
            • 2014-05-25
            • 2011-07-31
            相关资源
            最近更新 更多