是否可以在MySQL中将DECIMAL强制转换为DOUBLE?

时间:2012-10-05 08:22:51

标签: mysql casting double decimal

我知道所有数值含义,即浮点格式固有的可能舍入问题,但在我的情况下,DECIMAL中的MySQL列要转换为DOUBLE直接在MySQL查询而不是下游。

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:6)

SELECT my_decimal_field + 0E0 FROM my_table

答案 1 :(得分:1)

似乎无法将其投射到DOUBLE,如果您进行计算会产生问题,例如想要在第三位数中ROUND() DECIMAL 12,2。如果您的ROUND(foo * bar,2)foo是DECIMAL 12,2字段,则使用bar会忽略其他数字。

那说你可以做这样的事情仍然能让它发挥作用:

ROUND(CAST(foo AS DECIMAL(30,15)*CAST(bar AS DECIMAL(30,15)),2)

答案 2 :(得分:0)

DECIMAL 可以节省空间。例如,DECIMAL(4.2)仅占用2个字节。 FLOAT需要4; DOUBLE需要8。

关于原始问题,只需:

ALTER TABLE t MODIFY COLUMN c DOUBLE ...;

(“......”应该包含您已经拥有的其他内容,例如NOT NULL。)

答案 3 :(得分:0)

由于MySQL中内置的CAST函数的局限性,只能使用您自己的用户定义的强制转换函数将DECIMAL转换为DOUBLE

示例用例:

SELECT castDecimalAsDouble(0.000000000000000000100000000000);

结果:1e-23

CREATE DEFINER=`root`@`localhost` FUNCTION `castDecimalAsDouble`(
decimalInput DECIMAL(65,30) ) RETURNS double
DETERMINISTIC
BEGIN
DECLARE doubleOutput DOUBLE;

SET doubleOutput = decimalInput;

RETURN doubleOutput;
END