【问题标题】:Mysql cast to decimal give 99.9Mysql 转换为十进制给出 99.9
【发布时间】:2016-06-07 17:42:55
【问题描述】:

我有一个 varchar 字段说值是 174,但是当我 cast(field as decimal(3,1)) 时它总是给我 99.9?如何将其转换为 17.4?或者我必须在源级别更改输入以十进制本身输入吗?

【问题讨论】:

    标签: mysql casting


    【解决方案1】:

    这是因为174不能用小数点前2位和小数点后1位表示。 decimal(3,1) 表示“总共 3 位数字和小数点后的 1 位(3 位)。

    mysql> select cast('174' as decimal(3,1));
    +-----------------------------+
    | cast('174' as decimal(3,1)) |
    +-----------------------------+
    |                        99.9 |
    +-----------------------------+
    1 row in set, 1 warning (0.00 sec)
    

    它给出了一个警告,可以显示为:

    mysql> show warnings;
    +---------+------+----------------------------------------------------------------------+
    | Level   | Code | Message                                                              |
    +---------+------+----------------------------------------------------------------------+
    | Warning | 1264 | Out of range value for column 'cast('174' as decimal(3,1))' at row 1 |
    +---------+------+----------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    将数字除以 10,然后重试:

    mysql> select cast('174'/10 as decimal(3,1));
    +--------------------------------+
    | cast('174'/10 as decimal(3,1)) |
    +--------------------------------+
    |                           17.4 |
    +--------------------------------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • 所以如果我将我的字段设为整数,我可以做同样的除以我的 10 那么强制转换是正确的吗?
    • 是的。 '174'/10 隐式地将 varchar 转换为 int。
    • 没有我的意思,如果该字段是整数,例如174然后除以10是一样的答案吗?
    • 是的。完全一样。 select cast(174/10 as decimal(3,1));17.4。您只需确保 174/10 的结果实际上 适合decimal(3,1)
    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2012-06-17
    • 2011-07-28
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多