MySQL 데이터베이스 위에 PHP로 작성된 거대한 레거시 코드를 상속했습니다. 내가 주목 한 것은 응용 프로그램 doubles
이 데이터 저장 및 조작에 사용한다는 것 입니다.
이제 나는 double
반올림 오류로 인해 화폐 운영에 적합하지 않은 방법 을 언급하는 수많은 게시물을 보았습니다 . 그러나 아직 화폐 가치를 PHP 코드에서 처리하고 MySQL 데이터베이스에 저장하는 방법에 대한 완전한 솔루션을 찾지 못했습니다.
PHP로 돈을 처리 할 때 가장 좋은 방법이 있습니까?
내가 찾고있는 것 :
- 데이터베이스에 데이터를 어떻게 저장해야합니까? 열 유형? 크기?
- 정상적인 덧셈, 뺄셈에서 데이터를 어떻게 처리해야합니까? 곱셈 또는 나눗셈?
- 언제 값을 반올림해야합니까? 반올림이 가능한 경우 얼마나 되나요?
- 큰 금전적 가치와 낮은 금전적 가치를 다루는 데 차이가 있습니까?
참고 : 일상 생활에서 돈 가치가 발생할 수있는 방법에 대한 매우 단순화 된 샘플 코드 (다양한 보안 문제는 단순화를 위해 무시되었습니다. 물론 실제로는 내 코드를 다음과 같이 사용하지 않습니다) :
$a= $_POST['price_in_dollars']; //-->(ex: 25.06) will be read as a string should it be cast to double?
$b= $_POST['discount_rate'];//-->(ex: 0.35) value will always be less than 1
$valueToBeStored= $a * $b; //--> any hint here is welcomed
$valueFromDatabase= $row['price']; //--> price column in database could be double, decimal,...etc.
$priceToPrint=$valueFromDatabase * 0.25; //again cast needed or not?
이 샘플 코드를 사용하여 더 많은 사용 사례를 이끌어 내고 문자 그대로 사용하지 않기를 바랍니다.
보너스 질문 Doctrine 또는 PROPEL과 같은 ORM을 사용하는 경우 코드에서 돈을 사용하는 것이 얼마나 다른가요?
decimal
C # 의 유형은 정밀도가 제한적이지만 금전적 가치에 완벽하게 적합합니다.