コード例 #1
0
ファイル: Money.php プロジェクト: squigg/money
 /**
  * @param int|string $amount   Amount, expressed in the smallest units of $currency (eg cents)
  * @param Currency   $currency
  *
  * @throws \InvalidArgumentException If amount is not integer
  */
 public function __construct($amount, Currency $currency)
 {
     if (filter_var($amount, FILTER_VALIDATE_INT) === false && !Number::fromString($amount)->isInteger()) {
         throw new \InvalidArgumentException('Amount must be an integer(ish) value');
     }
     $this->amount = (string) $amount;
     $this->currency = $currency;
 }
コード例 #2
0
ファイル: PhpCalculator.php プロジェクト: squigg/money
 /**
  * {@inheritdoc}
  */
 public function round($number, $roundingMode)
 {
     if (Money::ROUND_HALF_POSITIVE_INFINITY === $roundingMode) {
         $number = Number::fromString((string) $number);
         if ($number->isHalf() === true) {
             return $this->castInteger(ceil((string) $number));
         }
         return $this->castInteger(round((string) $number, 0, Money::ROUND_HALF_UP));
     }
     if (Money::ROUND_HALF_NEGATIVE_INFINITY === $roundingMode) {
         $number = Number::fromString((string) $number);
         if ($number->isHalf() === true) {
             return $this->castInteger(floor((string) $number));
         }
         return $this->castInteger(round((string) $number, 0, Money::ROUND_HALF_DOWN));
     }
     return $this->castInteger(round($number, 0, $roundingMode));
 }
コード例 #3
0
ファイル: BcMathCalculator.php プロジェクト: squigg/money
 /**
  * {@inheritdoc}
  */
 public function round($number, $roundingMode)
 {
     $number = Number::fromString((string) $number);
     if ($number->isDecimal() === false) {
         return (string) $number;
     }
     if ($number->isHalf() === false) {
         return $this->roundDigit($number);
     }
     if (Money::ROUND_HALF_UP === $roundingMode) {
         return bcadd((string) $number, $number->getIntegerRoundingMultiplier(), 0);
     }
     if (Money::ROUND_HALF_DOWN === $roundingMode) {
         return bcadd((string) $number, '0', 0);
     }
     if (Money::ROUND_HALF_EVEN === $roundingMode) {
         if ($number->isCurrentEven() === true) {
             return bcadd((string) $number, '0', 0);
         }
         return bcadd((string) $number, $number->getIntegerRoundingMultiplier(), 0);
     }
     if (Money::ROUND_HALF_ODD === $roundingMode) {
         if ($number->isCurrentEven() === true) {
             return bcadd((string) $number, $number->getIntegerRoundingMultiplier(), 0);
         }
         return bcadd((string) $number, '0', 0);
     }
     if (Money::ROUND_HALF_POSITIVE_INFINITY === $roundingMode) {
         if ($number->isNegative() === true) {
             return bcadd((string) $number, '0', 0);
         }
         return bcadd((string) $number, $number->getIntegerRoundingMultiplier(), 0);
     }
     if (Money::ROUND_HALF_NEGATIVE_INFINITY === $roundingMode) {
         if ($number->isNegative() === true) {
             return bcadd((string) $number, $number->getIntegerRoundingMultiplier(), 0);
         }
         return bcadd((string) $number, '0', 0);
     }
     throw new \InvalidArgumentException('Unknown rounding mode');
 }