You are here

class Rounder in Price 3.x

Same name and namespace in other branches
  1. 8 src/Rounder.php \Drupal\price\Rounder
  2. 2.0.x src/Rounder.php \Drupal\price\Rounder
  3. 2.x src/Rounder.php \Drupal\price\Rounder
  4. 3.0.x src/Rounder.php \Drupal\price\Rounder

Hierarchy

Expanded class hierarchy of Rounder

1 string reference to 'Rounder'
price.services.yml in ./price.services.yml
price.services.yml
1 service uses Rounder
price.rounder in ./price.services.yml
Drupal\price\Rounder

File

src/Rounder.php, line 7

Namespace

Drupal\price
View source
class Rounder implements RounderInterface {

  /**
   * The currency storage.
   *
   * @var \Drupal\Core\Entity\EntityStorageInterface
   */
  protected $currencyStorage;

  /**
   * Constructs a new Rounder object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager) {
    $this->currencyStorage = $entity_type_manager
      ->getStorage('price_currency');
  }

  /**
   * {@inheritdoc}
   */
  public function round(Price $price, $mode = PHP_ROUND_HALF_UP) {
    $currency_code = $price
      ->getCurrencyCode();

    /** @var \Drupal\price\Entity\CurrencyInterface $currency */
    $currency = $this->currencyStorage
      ->load($currency_code);
    if (!$currency) {
      throw new \InvalidArgumentException(sprintf('Could not load the "%s" currency.', $currency_code));
    }
    $rounded_number = Calculator::round($price
      ->getNumber(), $currency
      ->getFractionDigits(), $mode);
    return new Price($rounded_number, $currency_code);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Rounder::$currencyStorage protected property The currency storage.
Rounder::round public function Rounds the given price to its currency precision. Overrides RounderInterface::round
Rounder::__construct public function Constructs a new Rounder object.