我知道所有的数字含义,也就是固有的浮点格式,但对我来说可能的四舍五入问题,我有DECIMAL
列MySQL
,我要转换为DOUBLE
直在MySQL
查询,而不是往下流。
谁能帮助吗?
我知道所有的数字含义,也就是固有的浮点格式,但对我来说可能的四舍五入问题,我有DECIMAL
列MySQL
,我要转换为DOUBLE
直在MySQL
查询,而不是往下流。
谁能帮助吗?
SELECT my_decimal_field + 0E0 FROM my_table
这似乎无法施展它DOUBLE
如果你做计算,例如想这带来的问题ROUND()
一个DECIMAL 12,2
在第三位。 使用ROUND(foo * bar,2)
会忽略额外的数字,如果你foo
和bar
都是十进制12,2领域。
这就是说,你可以做这样的事情仍然使其工作:
ROUND(CAST(foo AS DECIMAL(30,15)*CAST(bar AS DECIMAL(30,15)),2)
由于内置的限制CAST
功能在MySQL中,它是唯一可能转换成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
DECIMAL 可以节省空间。 例如, DECIMAL(4.2)
仅占用2个字节。 FLOAT
需要4; DOUBLE
需要8。
至于原来的问题,简单地做:
ALTER TABLE t MODIFY COLUMN c DOUBLE ...;
(其中“...”应该包括你已经有其他的东西,比如NOT NULL
)。