묻고답하기
포인트가 정수(int)로 되어 있는데요, 실수(decimal)로 바꿀 수 있나요?
2013.07.06 16:00
XE 1.7.3.4 사용 중입니다.
포인트를 잘게 나눌 필요가 있습니다.
표시해야 하는 최소단위는 소수 이하 여덟 자리까지입니다.
0.000 000 01
XE에서는 포인트가 int로 처리되고 있는 것 같습니다.
db에서 보니까
bigint(11) |
로 나옵니다.
정수로 처리되는 포인트를 int 말고 decimal 실수로 표현, 저장할 수 있나요?
간단하게 처리가 가능한지,
아니면 다른 모듈 부분과 연계되어 충돌이 일어날 수 있으므로
포인트 말고 별개의 db 를 이용해야 할까요?
가급적 포인트로 처리를 했으면 좋겠네요.
소수처리가 불가능하다면 자료형만 int 말고 long 으로 바꾸고
화면에 보이는 것만 10^8 로 나눠서 표시하는 방법을 써야 할 것 같습니다만
어떨까요?
댓글 1
-
2-COIN
2013.07.06 17:06
일단... mysql 상에서만 바꾸는 거는 decimal(16,8) 로 하면 원하는 범위가 딱 나오네요. 0 ~ 99999999.99999999 -
2-COIN
2013.07.07 14:51
지금까지 삽질한 결과...
point db의 structure를 bigint(11) -> decimal(16,8)로 수정
원하는 범위 ~ 99999999.99999999 를 얻을 수 있었습니다.
그러나 포인트 관련한 대부분의 함수들이 (int)로 처리되어 있어서
일일이 다 수정해야 하는 불편함이 있네요.
그나마 수정한다고 했는데, 막상 db에는 실수부분이 모두 날아가고 00000000 으로 저장
일단 포기했습니다.
포기하고 나서 그냥 10^-8 = 1 point 로 하는 단위로 생각하니까 훨씬 편하네요.
db는 bigint(20)으로 바꾸고,
포인트는 주고받는 단위를 10^8 으로 하니까 구현하려는 것은 대충 구현이 되는 것 같네요.
다만...
숫자 단위가 너무 커지다보니 입력시 실수할 가능성이 무척 높아져서,
view 에서는 입력 단위를 선택해서 간단하게 입력할 수 있도록 해야겠습니다.
-----------------------------------
포인트 모듈이 코어와 아주 많이 엮여 있는 듯 하여,
실수형식으로 변환하는 것은 조금 부적절하다는 결론을 내렸습니다.
그냥 정수형으로 쓰고,
보이는 부분(레이아웃 view 등)만 적당히 처리해서 보여주는 것이 최선인 듯 합니다.