<?php
|
namespace PhpAmqpLib\Wire;
|
|
use PhpAmqpLib\Exception\AMQPOutOfBoundsException;
|
|
/**
|
* AMQP protocol decimal value.
|
*
|
* Values are represented as (n,e) pairs. The actual value
|
* is n * 10^(-e).
|
*
|
* From 0.8 spec: Decimal values are
|
* not intended to support floating point values, but rather
|
* business values such as currency rates and amounts. The
|
* 'decimals' octet is not signed.
|
*/
|
class AMQPDecimal
|
{
|
/** @var int */
|
protected $n;
|
|
/** @var int */
|
protected $e;
|
|
/**
|
* @param int $n
|
* @param int $e
|
* @throws \PhpAmqpLib\Exception\AMQPOutOfBoundsException
|
*/
|
public function __construct($n, $e)
|
{
|
if ($e < 0) {
|
throw new AMQPOutOfBoundsException('Decimal exponent value must be unsigned!');
|
}
|
|
$this->n = $n;
|
$this->e = $e;
|
}
|
|
/**
|
* @return string
|
*/
|
public function asBCvalue()
|
{
|
return bcdiv($this->n, bcpow(10, $this->e));
|
}
|
|
/**
|
* @return int
|
*/
|
public function getE()
|
{
|
return $this->e;
|
}
|
|
/**
|
* @return int
|
*/
|
public function getN()
|
{
|
return $this->n;
|
}
|
}
|