알파피플 앱

User.chatCost, LcProfile.ord 가 String 임.

Assigned to
이재철, Backend at Alphapeople 이재철
Notes
아래 타입도 체크 부탁드립니다!

- User.chatCost: double이 아닌 String 타입으로 내려옴
- LcProfile.ord: decimal이 아닌 String 타입으로 내려옴

Comments & Events

이재철, Backend at Alphapeople
김기범, Flutter at Alphapeople 김기범  

1. 앱 내에서 float 타입을 절대 쓰지 않습니다. 그래픽 등의 연산에서는 최대 자릿수가 중요해서 double을 쓰지만, 돈 관련 애플리케이션에서는 float을 절대 쓰지 않습니다. 아래 같은 문제 때문입니다.

a = 0.1
b = 0.2
c = a + b

print(c)           # 0.30000000000000004
print(c == 0.3)    # False

2. 그래서 언어 기본 타입에는 없지만, Decimal 을 사용합니다. 대부분의 언어에 라이브러리로 있습니다. 그리고 Decimal 을 json 등으로 표현할때는 String 으로 표현합니다.

3. flutter 앱 내에서 Decimal 연산을 할 곳이 있을지 모르겠네요. 대부분은 API 에 받은 Decimal 을 표시만 해주면 될듯 해서 String 을 그대로 쓰셔도 되지 않을까 싶습니다.

4. 만약 flutter 내에서 연산이 필요하다면, 비지니스 로직이 클라이언트에 들어간 잘못된 상황이라, API 에 추가해달라고 해주세요.
이재철 moved this card to Done.
이재철, Backend at Alphapeople
이재철 completed this card.
김기범, Flutter at Alphapeople
이재철, Backend at Alphapeople 이재철  

앱 내에서는 숫자를 표시할 때 항상 포맷팅을 고려하여 출력해야 합니다.
(ex. 자릿수 세자리마다 comma 추가)

즉 앱에서는 현재 내려주시는 String을 그대로 쓰는 것이 아닌, 별도의 타입 변환 및 포맷팅 과정이 필요하여, 가능한 숫자는 숫자 타입으로 내려주시는 것이 좋습니다.

물론 앱에서는 굳이 부동소수점 오류를 고려할 만한 케이스는 없어서, Double로도 충분하다고 봅니다.

만약 GraphQL 라이브러리 특성상 Decimal → String 으로 내려주는 것이 더 편하실 경우 말씀 주세요!
김기범, Flutter at Alphapeople
추가로 LcProfile.ord 의 의미를 order 로 이해했는데 맞을까요?
해당 필드가 Decimal 인 것으로 보아 다른 의미일 것 같아서 확인 부탁드립니다.
이재철, Backend at Alphapeople
순서 맞습니다. 근데 노출될 필요가 없는 필드라 숨길께요
이재철, Backend at Alphapeople
김기범, Flutter at Alphapeople 김기범  

<기존>
셀럽이 보상받는 스텔라 자체를 70%만 줄 것을 대비해서 decimal 이 필요했음.
ex. 유저가 3스텔라 소비시, 셀럽은 2.1스텔라 받음

<어제 재현님과 논의한 결과>
셀럽은 유저의 스텔라를 그대로 받고, 정산할때 구입액의 0.7배를 줌
ex. 유저가 3스텔라 소비시, 셀럽은 3스텔라 받음


-----> 이로 인해 stella 를 소수로 표현할 일이 사라졌습니다. integer 로 바꿀께요.