Decimal128
개요
MongoDB 3.4 은 정확한 정밀도로 소수점 반올림을 에뮬레이션할 수 있는 128비트 십진수 기반 부동 소수점 값인 십진수128 BSON 유형에 대한 지원을 도입했습니다. 이 기능은 금융 및 세금 계산과 같이 화폐 데이터 를 처리하는 애플리케이션을 위한 것입니다.
MongoDB\BSON\Decimal128 클래스를 사용하여 PHP에서 이 유형으로 작업할 수 있습니다.
Decimal128 값으로 작업하기
Decimal128 삽입
다음 예제에서는 Decimal128
price
collection의 필드에 유형의 값을 inventory
삽입합니다.
$collection = (new MongoDB\Client)->test->inventory; $collection->insertOne([ '_id' => 1, 'item' => '26-inch monitor', 'price' => new MongoDB\BSON\Decimal128('428.79'), ]); $item = $collection->findOne(['_id' => 1]); var_dump($item);
이 경우 출력은 다음과 유사합니다:
object(MongoDB\Model\BSONDocument)#9 (1) { ["storage":"ArrayObject":private]=> array(3) { ["_id"]=> int(1) ["item"]=> string(15) "26-inch monitor" ["price"]=> object(MongoDB\BSON\Decimal128)#13 (1) { ["dec"]=> string(6) "428.79" } } }
BCMh를 사용한 수학적 연산
확장 프로그램 값으로 작업하기 위한 기능을 제공하지 Decimal128
않습니다. 그러나 MongoDB\BSON\Decimal128 의 문자열 표현은 객체는 PHP의 BCMath 와 함께 사용할 수 있습니다. 확장자.
다음 예에서는 두 Decimal128
개의 값을 추가하고 Decimal128
bcadd()의 결과로 새 값을 만듭니다.
$lhs = new MongoDB\BSON\Decimal128('1.234'); $rhs = new MongoDB\BSON\Decimal128('5.678'); $sum = new MongoDB\BSON\Decimal128(bcadd($lhs, $rhs)); var_dump($sum);
이 경우 출력은 다음과 유사합니다:
object(MongoDB\BSON\Decimal128)#4 (1) { ["dec"]=> string(1) "6" }
이는 예상 결과 '6.912'와 일치하지 않습니다. BCMth API의 각 작업은 스케일을 사용하여 결과의 소수점 자릿수를 결정합니다. 기본 스케일은 0이므로 위의 예시에서 소수점 정밀도가 없는 결과를 생성합니다.
다음 예제에서는 bcadd() 에 대해 3의 척도를 사용합니다. 예상 결과를 얻으려면 다음을 수행합니다.
$lhs = new MongoDB\BSON\Decimal128('1.234'); $rhs = new MongoDB\BSON\Decimal128('5.678'); $sum = new MongoDB\BSON\Decimal128(bcadd($lhs, $rhs, 3)); var_dump($sum);
이 경우 출력은 다음과 유사합니다:
object(MongoDB\BSON\Decimal128)#4 (1) { ["dec"]=> string(5) "6.912" }
각 작업에 대한 배율을 지정하는 대신 bcScale() 을 통해 기본 배율을 설정할 수 있습니다. 또는 bcmath.Scale INI 설정 . Decimal128
유형은 최대 34 소수점 이하 자릿수를 지원합니다(즉, 유효 숫자).