2016-12-03 1 views
0

나는 사용자가 통화를 선택할 수있는 돈 관련 앱을 만들려고했다. 시도한 Mysql 데이터 형식은 십진수 (19,4)입니다. 이제 문제는 세 가지 정밀도가 필요한 통화가 거의없고 두 가지가 필요합니다. 예 : 오만 rial에는 세 가지 정밀도가 필요합니다. 즉 1000 baisa = 1 오만 리알. 따라서 고객은 6.783 오만 리알에 입장 할 수 있습니다. 내 미국 고객은 100 센트 = 1 달러로 2 개의 정밀도 만 있으면되며 5.50을 입력 할 수 있습니다.돈을위한 Mysql 데이터 유형

십진수 (19,4)를 사용하여이 두 항목을 데이터베이스에 삽입하면 각각 6.7830 및 5.5000으로 저장됩니다.

이제 진짜 고통은 오마이 (Omani) 리알 엔트리에 여분의 0을 표시하고 US 달러로 00을 표시하고 싶지 않기 때문에 항목을 표시해야 할 때입니다. 나는 또한 float를 시도했지만 마지막 숫자는 때때로 반올림됩니다.

반올림 또는 추가 0없이 정확한 항목을 저장할 수있는 mysql 데이터 유형이 있습니까? 그런 입장이 없다면, 나는 그것을 어떻게 신통하게 할 수 있습니까?

답변

0

정확한 표현을 저장하려면 VARCHAR을 사용할 수 있지만 숫자를 문자열로 저장하는 데 더 많은 바이트가 필요하기 때문에 권장하지 않습니다. 그리고 당신이이 값에 대해 수행하는 산술 연산은 숫자로 변환됩니다.

DECIMAL(19,4)을 사용하고 응용 프로그램 코드에서 해당 숫자의 서식을 지정하여 해당 숫자로 표시하는 것이 좋습니다. 모든 프로그래밍 언어에는 저장된 값에 관계없이 출력 형식을 제어 할 수있는 printf()과 같은 일부 기능이 있습니다.

+0

어떻게하면 적절한 자릿수를 추적 할 수 있습니까? 마침표 다음에 자릿수를 추적하기 위해 새 coloumn을 만들어야합니까? 즉 6.783의 경우 3 점을 저축해야합니까? – Rishad

+1

대부분의 정밀도가 필요한 통화에서 사용할 정밀도로 열 유형을 선언하십시오. 다른 모든 통화는이 데이터 형식을 사용할 수도 있습니다. 응용 프로그램에는 통화 유형에 따라 값을 다르게 형식화하는 논리가 있어야합니다. –

+0

'DECIMAL (.., 4)'는'(.., 2)'보다 단지 1 바이트 이상 걸리기 때문에 많은 공간을 낭비하지 않는다는 것에주의하십시오. 나는 원치 않는 꼬리표 0을 제거하는 것은 응용 프로그램에 달려 있다는 것에 동의한다. –

관련 문제