Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル
/

Decimal128

MongoDB 3.4では、正確な精度で小数の丸めをエミュレートできる128ビットの 10 進数ベースの浮動小数点値である Decimal 128 BSON 型のサポートが導入されました。 この機能は、財務や税金の計算など、 金銭データを取り扱うアプリケーションを対象としています。

MongoDB\ BSON\Decimal128 クラスは、 PHPでこの型を操作するために使用できます。

次の例では、 inventoryという名前のコレクションのpriceフィールドに Decimal128型の値を挿入します。

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

Decimal128拡張機能では、 値を操作する機能は提供されません。ただし、 MongoDB+ BSON$Decimal128 オブジェクトの string 表現は、PHP の BCMath 拡張機能で使用できます。

次の例では、2Decimal128 つの 値を追加し、Decimal128 badd() の結果を持つ新しい 値を作成します。

<?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" と一致しません。 BCMath API の各操作では、スケールを使用して結果内の小数点の桁数を決定します。 デフォルトの単位は 0 であるため、上記の例では小数精度のない結果が生成されます。

次の例では 、期待される結果を得るために 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"
}

各操作の増やすを指定する 代わりに、 BC scale() または bmath を使用してデフォルトの増やすを設定できます。 INI 設定を増やす。Decimal128 タイプは最大 桁の34 10 進数(有効桁数)をサポートします。

戻る

コーデック

項目一覧