부동 소수점 형식에 내재 된 가능한 모든 반올림 문제를 알고 있지만, 내 경우에 MySQL
에있는 열에는 다운 스트림이 아닌 MySQL
쿼리로 곧바로 DOUBLE
으로 변환하려고합니다.MySQL에서 DECIMAL을 DOUBLE로 변환 할 수 있습니까?
아무도 도와 줄 수 있습니까?
부동 소수점 형식에 내재 된 가능한 모든 반올림 문제를 알고 있지만, 내 경우에 MySQL
에있는 열에는 다운 스트림이 아닌 MySQL
쿼리로 곧바로 DOUBLE
으로 변환하려고합니다.MySQL에서 DECIMAL을 DOUBLE로 변환 할 수 있습니까?
아무도 도와 줄 수 있습니까?
10 진수 절약 공간. 예를 들어 DECIMAL(4.2)
은 2 바이트 만 차지합니다. FLOAT
은 4를 취합니다. DOUBLE
은 원래의 질문에 대해서는 8
소요, 단순히 수행
이ALTER TABLE t MODIFY COLUMN c DOUBLE ...;
(이하 "..."NOT NULL
같은 당신이 이미 가지고 다른 물건을 포함한다.)
그것을 DOUBLE
으로 캐스팅 할 수 없으며 계산을 수행하는 경우 문제가 발생합니다. 예를 들어 ROUND()
은 DECIMAL 12,2
의 세 번째 숫자입니다. ROUND(foo * bar,2)
을 사용하면 foo
및 bar
이 DECIMAL 12,2 필드 인 경우 추가 숫자는 무시됩니다.
ROUND(CAST(foo AS DECIMAL(30,15)*CAST(bar AS DECIMAL(30,15)),2)
SELECT my_decimal_field + 0E0 FROM my_table
시도 했습니까? 'CAST (fldName as double)'? [현재 MySQL에 액세스 할 수있는 권한이 없습니다.] 응용 프로그램에서 사용하고 있다면 아마도 어쨌든 이중으로 제시 될 것입니다. 왜 그걸하고 싶니? Double은 더 부정확 한 Decimal입니다. –
''CAST'는 [docs] (http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast)에서 지적한대로'DOUBLE'로 변환 할 수 없습니다. 이 경우 데이터를 저장하는 효율적인 중간 방법으로'DECIMAL' 만 사용합니다. 쿼리의 데이터를 사용하는 코드는 모두 부동 소수점 형식입니다. – c00kiemonster
나는 당신의 요점/문제/이유를 보지 못했습니다. 귀하의 코드는 부동 소수점을 사용합니다 (소수의 프로그래밍 언어가 내장되어 있지는 않습니다). 귀하의 코드는 분명히 그렇지 않습니다. *하지만 ** 당신이 SQL에서 double/float으로 사용하고 처리하기를 원한다면 ** ** 당신은 ** 아닌가? 그것을 두 배로 저장하십시오. 그러면 ** 전송할 필요가 없습니다 **. (그것은 내가'캐스팅 '에 대한 제한을 확인하지 못했습니다. **) ** 그리고 ** ** 당신이 캐스팅 할 수 없다는 것을 ** 알고 있다면, ** 당신은 왜이 질문을하고 있습니까? –