【问题标题】:casting a floating to decimal in mysql在mysql中将浮点数转换为十进制
【发布时间】:2014-01-26 08:12:00
【问题描述】:

我不太了解这里的cast 函数和decimaldecimal(7,2) 究竟是什么意思? The first part and the second part arg of the function.

这里为什么需要cast/convert我的浮点数转十进制?

mysql> SELECT productCode, MAX(price), MIN(price),
              CAST(AVG(price) AS DECIMAL(7,2)) AS `Average`,
              CAST(STD(price) AS DECIMAL(7,2)) AS `Std Dev`,
              SUM(quantity)
       FROM products
       GROUP BY productCode;
+-------------+------------+------------+---------+---------+---------------+
| productCode | MAX(price) | MIN(price) | Average | Std Dev | SUM(quantity) |
+-------------+------------+------------+---------+---------+---------------+
| PEC         |       0.49 |       0.48 |    0.49 |    0.01 |         18000 |
| PEN         |       1.25 |       1.23 |    1.24 |    0.01 |         15000 |
+-------------+------------+------------+---------+---------+---------------+

下面是一个相同的 sql fiddle?。

http://sqlfiddle.com/#!2/1ed51b/1/0

我的问题再次重复:

  1. decimal(7,2) 究竟是什么意思? The first part and the second part arg of the function.
  2. 这里为什么需要cast/convert我的浮点数转十进制?。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    DECIMAL(7,2) 表示一个固定小数点的数字,共有 7 位数字,其中 2 位在小数点右侧。 (所以,左 5,右 2。)

    您不需要 进行转换,除非您想要 DECIMAL 类型的行为(通常是定点)而不是 FLOAT 类型的行为(有用的近似值,具有相对不可预测的位数小数点)。例如,您的产品代码“PEC”with 的平均值为 33333.65; 没有演员表是 33333.653333。

    如果您经常使用所有位,您可能应该增加演员表中的总位数。比如说DECIMAL (14,2)

    【讨论】:

      【解决方案2】:

      为什么?因为如果只是为了显示值,那么转换为带两位小数的 DECIMAL 会更容易阅读。如果您取出 CAST,您将看到像 AVERAGE 33333.653333 STD DEV 47140.218734 这样的值。

      【讨论】:

        【解决方案3】:

        您可以在 MySQL 手册中阅读:

        DECIMAL 列的声明语法是 DECIMAL(M,D)。这 MySQL 5.1 中参数的取值范围如下:

        M 是最大位数(精度)。它的范围为 1 到 65。(旧版本的 MySQL 允许的范围是 1 到 254。)

        D 是小数点右边的位数( 规模)。取值范围为 0 到 30,且不得大于 M。

        如果您使用decimal(M,D),您将不会为小数点左侧的任何内容保留任何位置。 Decimal(7,2) 表示7-2 = 5 其中5 是您的整数左侧,2 在右侧。

        简而言之,它描述了一个字段能够存储的总位数。 Decimal(50,2) = 52 total digits50 before2 after decimal separator

        【讨论】:

          猜你喜欢
          • 2014-03-01
          • 1970-01-01
          • 2021-08-11
          • 2014-11-24
          • 2010-12-08
          • 2016-06-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多