문제

그래서 저는 돈을 많이 다루는 응용 프로그램 (PHP/MySQL)을 만들 계획이며, PHP 플로트 데이터 유형과 MySQL 소수점을 언급하면서 돈을 저장하고 운영하는 방법에 대해 생각하고 있습니다.

두 가지 옵션을 생각하고있었습니다. 그중 하나는 플로트 수입을 다루지 않고 DB에 정수로 저장하기 위해 정수 센트 형식 ($ * 100)으로 돈을 운영하고 저장하는 것입니다. 다른 하나는 DB로 소수점으로 저장하고 계산을 위해 PHP에서 BC 수학을 사용하는 것입니다.

그래서 나는 밤 내내 검색하여 사용하기 가장 좋은 옵션이며 명확한 대답을 찾지 못했습니다. 내가 본 유일한 합리적인 옵션은 정수 센트 1입니다.

또한 사람들은 MySQL Decimal에 대해 불평했습니다 (MySQL은 소수점을 문자열로, 플로트 등으로 작동합니다). 그러나 그것은 오래된 게시물이었습니다. MySQL 문서에 따르면, 현재 버전은 소수성을 올바르게 처리합니다. 유일한 불만은 선언 된 분수 길이를 초과하는 값의 비율을 자르고 있다는 것입니다 (예 : 열에 12.326의 값을 소진으로 선언 한 10 진수 (9,2)를 저장하는 경우). 그러나 내 조사에서 단지 자르기 대신 (12.326이 12.33이된다) 반올림합니다. 이는 제 생각에 맞습니다.

그리고 저는 돈을 소수로 저장하고 PHP BCMATH를 사용하여 계산하는 것에 대한 권장 사항을 찾지 못했습니다. 제 생각에는 BC 및 GMP 수학 기능에 대해 아는 사람이 거의 없기 때문입니다.

그렇다면 정밀, 속도 (BCMath 계산 속도, MySQL 소진 속도 대 정수) 및 프로그래밍 편안함을 고려하여 사용하기 가장 좋은 옵션은 무엇입니까?

도움이 되었습니까?

해결책

나는 분명히 INT를 사용하고 데이터 객체 (ORM) 스타일을 통해 모든 것을 라우팅하여 모든 변환을 처리합니다. 데이터 객체를 사용하는 클라이언트 코드는 변환을 수행 할 필요가 없으며 신경 쓰지 않지만 DB가 쉽게 처리하므로 스토리지에 문제가 없습니다. 또한 돈 객체 (돈 유형 간의 전환 등)에 필요한 다른 방법을 아주 쉽게 추가 할 수 있습니다.

다른 팁

나는 또한 BCMATH에 대한 정보를 찾는 데 어려움을 겪었으므로 그것을 조사하고 그것에 대한 내 기사를 썼습니다. http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/ .

(나는 당신이 bcmath를 사용해야한다는 입장을 취하지 않습니다 - 나는 당신에게 정보를 제공합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top