我知道所有数值含义,即浮点格式固有的可能舍入问题,但在我的情况下,DECIMAL
中的MySQL
列要转换为DOUBLE
直接在MySQL
查询而不是下游。
有人可以帮忙吗?
答案 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