2012-10-05 3 views
4

부동 소수점 형식에 내재 된 가능한 모든 반올림 문제를 알고 있지만, 내 경우에 MySQL에있는 열에는 다운 스트림이 아닌 MySQL 쿼리로 곧바로 DOUBLE으로 변환하려고합니다.MySQL에서 DECIMAL을 DOUBLE로 변환 할 수 있습니까?

아무도 도와 줄 수 있습니까?

+0

시도 했습니까? 'CAST (fldName as double)'? [현재 MySQL에 액세스 할 수있는 권한이 없습니다.] 응용 프로그램에서 사용하고 있다면 아마도 어쨌든 이중으로 제시 될 것입니다. 왜 그걸하고 싶니? Double은 더 부정확 한 Decimal입니다. –

+1

''CAST'는 [docs] (http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_cast)에서 지적한대로'DOUBLE'로 변환 할 수 없습니다. 이 경우 데이터를 저장하는 효율적인 중간 방법으로'DECIMAL' 만 사용합니다. 쿼리의 데이터를 사용하는 코드는 모두 부동 소수점 형식입니다. – c00kiemonster

+0

나는 당신의 요점/문제/이유를 보지 못했습니다. 귀하의 코드는 부동 소수점을 사용합니다 (소수의 프로그래밍 언어가 내장되어 있지는 않습니다). 귀하의 코드는 분명히 그렇지 않습니다. *하지만 ** 당신이 SQL에서 double/float으로 사용하고 처리하기를 원한다면 ** ** 당신은 ** 아닌가? 그것을 두 배로 저장하십시오. 그러면 ** 전송할 필요가 없습니다 **. (그것은 내가'캐스팅 '에 대한 제한을 확인하지 못했습니다. **) ** 그리고 ** ** 당신이 캐스팅 할 수 없다는 것을 ** 알고 있다면, ** 당신은 왜이 질문을하고 있습니까? –

답변

0

10 진수 절약 공간. 예를 들어 DECIMAL(4.2)은 2 바이트 만 차지합니다. FLOAT은 4를 취합니다. DOUBLE은 원래의 질문에 대해서는 8

소요, 단순히 수행

ALTER TABLE t MODIFY COLUMN c DOUBLE ...; 

(이하 "..."NOT NULL 같은 당신이 이미 가지고 다른 물건을 포함한다.)

0

그것을 DOUBLE으로 캐스팅 할 수 없으며 계산을 수행하는 경우 문제가 발생합니다. 예를 들어 ROUND()DECIMAL 12,2의 세 번째 숫자입니다. ROUND(foo * bar,2)을 사용하면 foobar이 DECIMAL 12,2 필드 인 경우 추가 숫자는 무시됩니다.

는 여전히 작동하도록하기 위해이 같은 작업을 수행 할 수 있습니다 말했다 : 당신은 그것을

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

SELECT my_decimal_field + 0E0 FROM my_table

관련 문제