Bcadd php

Tham số scale tùy chọn được sử dụng để đặt số chữ số sau vị trí thập phân sẽ được sử dụng trong so sánh

Giá trị trả về

Trả về 0 nếu hai toán hạng bằng nhau, 1 nếu num1 lớn hơn num2, -1 nếu ngược lại

MongoDB 3. 4 đã giới thiệu hỗ trợ cho loại Decimal128 BSON, là giá trị dấu phẩy động dựa trên số thập phân 128 bit có khả năng mô phỏng làm tròn số thập phân với độ chính xác chính xác. Chức năng này dành cho các ứng dụng xử lý dữ liệu tiền tệ, chẳng hạn như tính toán tài chính và thuế

Lớp MongoDBBSONDecimal128, được giới thiệu trong trình điều khiển PHP 1. 2. 0, có thể được sử dụng để làm việc với loại này trong PHP

Làm việc với các giá trị thập phân128

Chèn một số thập phân128

Ví dụ sau chèn một giá trị kiểu Decimal128 vào trường

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"
    }
  }
}
0 của bộ sưu tập có tên
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"
    }
  }
}
1



$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);

Đầu ra sau đó sẽ giống như

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

Phép toán với BCMath

Trình điều khiển PHP không cung cấp bất kỳ chức năng nào để làm việc với các giá trị Decimal128;

Ví dụ sau thêm hai giá trị Decimal128 và tạo một giá trị Decimal128 mới với kết quả từ 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);

Đầu ra sau đó sẽ giống như

object(MongoDB\BSON\Decimal128)#4 (1) {
  ["dec"]=>
  string(1) "6"
}

Điều này không phù hợp với kết quả mong đợi của “6. 912”. Mỗi hoạt động trong BCMath API sử dụng một tỷ lệ để xác định số chữ số thập phân trong kết quả. Tỷ lệ mặc định là 0, đó là lý do tại sao ví dụ trên tạo ra kết quả không có độ chính xác thập phân

Trong ví dụ sau, chúng tôi sử dụng thang điểm ba cho bcadd() để thu được kết quả như mong đợi



$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);

Đầu ra sau đó sẽ giống như

object(MongoDB\BSON\Decimal128)#4 (1) {
  ["dec"]=>
  string(5) "6.912"
}

Thay vì chỉ định tỷ lệ cho từng hoạt động, tỷ lệ mặc định có thể được đặt qua bcscale() hoặc bcmath. cài đặt INI theo tỷ lệ. Loại Decimal128 hỗ trợ tối đa 34 chữ số thập phân (i. e. chữ số có nghĩa)