문서 메뉴

문서 홈PHP 라이브러리 매뉴얼

Decimal128

이 페이지의 내용

  • 개요
  • Decimal128 값으로 작업하기
  • Decimal128 삽입
  • BCMh를 사용한 수학적 연산

MongoDB 3.4 은 정확한 정밀도로 소수점 반올림을 에뮬레이션할 수 있는 128비트 십진수 기반 부동 소수점 값인 십진수128 BSON types 에 대한 지원을 도입했습니다. 이 기능은 금융 및 세금 계산과 같은 화폐 데이터 를 처리하는 애플리케이션을 위한 것입니다.

MongoDB\BSON\Decimal128 PHP 드라이버 에 도입된 클래스 1.2.0, PHP에서 이 유형으로 작업하는 데 사용할 수 있습니다.

다음 예제에서는 Decimal128 price collection의 필드에 유형의 값을 inventory 삽입합니다.

<?php
$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"
}
}
}

PHP 드라이버 값으로 작업하기 위한 기능을 제공하지 Decimal128 않습니다. 그러나 MongoDB\BSON\Decimal128 의 문자열 표현은 객체는 PHP의 BCMath 와 함께 사용할 수 있습니다. 확장자.

다음 예에서는 두 Decimal128 개의 값을 추가하고 Decimal128 bcadd()의 결과로 새 값을 만듭니다.

<?php
$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의 척도를 사용합니다. 예상 결과를 얻으려면 다음을 수행합니다.

<?php
$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 최대 소수점 자릿수(즉, 유효 자릿수)를 지원합니다.

← 사용자 지정 데이터 유형