NumberFormatter.php in Physical Fields 8
File
src/NumberFormatter.php
View source
<?php
namespace Drupal\physical;
use Drupal\Core\Language\LanguageManagerInterface;
class NumberFormatter implements NumberFormatterInterface {
protected $numberFormatter;
protected $languageManager;
public function __construct(LanguageManagerInterface $language_manager) {
if (extension_loaded('intl')) {
$language = $language_manager
->getConfigOverrideLanguage() ?: $language_manager
->getCurrentLanguage();
$this->numberFormatter = new \NumberFormatter($language
->getId(), \NumberFormatter::DECIMAL);
}
}
public function format($number, array $options = []) {
$default_options = [
'use_grouping' => TRUE,
'minimum_fraction_digits' => 0,
'maximum_fraction_digits' => 6,
];
$options = array_replace($default_options, $options);
if ($this->numberFormatter) {
$this->numberFormatter
->setAttribute(\NumberFormatter::GROUPING_USED, $options['use_grouping']);
$this->numberFormatter
->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, $options['minimum_fraction_digits']);
$this->numberFormatter
->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, $options['maximum_fraction_digits']);
$number = $this->numberFormatter
->format($number);
}
else {
if ($options['minimum_fraction_digits'] == 0) {
$number = Calculator::trim($number);
}
}
return $number;
}
public function parse($number) {
if ($this->numberFormatter) {
$number = $this->numberFormatter
->parse($number);
if (is_numeric($number)) {
$number = (string) $number;
}
}
elseif (!is_numeric($number)) {
$number = FALSE;
}
return $number;
}
}