Skip to content

Commit

Permalink
Merge e906077 into 1fb3b06
Browse files Browse the repository at this point in the history
  • Loading branch information
c960657 committed Aug 5, 2018
2 parents 1fb3b06 + e906077 commit f894a4b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 22 deletions.
50 changes: 28 additions & 22 deletions src/Number.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,36 +77,42 @@ public static function format($value, $precision = null, $locale = '')
}
}
if ($number !== null) {
$precision = is_numeric($precision) ? (int) $precision : null;
if ($precision !== null) {
$value = round($value, $precision);
}
$data = Data::get('numbers', $locale);
$decimal = $data['symbols']['decimal'];
$groupLength = (isset($data['groupLength']) && is_numeric($data['groupLength'])) ? (int) $data['groupLength'] : 3;
if ($value < 0) {
$sign = $data['symbols']['minusSign'];
$value = abs($value);
} else {
$sign = '';
}
$full = explode('.', (string) $value, 2);
$intPart = $full[0];
$floatPath = count($full) > 1 ? $full[1] : '';
$len = strlen($intPart);
if (($groupLength > 0) && ($len > $groupLength)) {
$groupSign = $data['symbols']['group'];
$preLength = 1 + (($len - 1) % 3);
$pre = substr($intPart, 0, $preLength);
$intPart = $pre.$groupSign.implode($groupSign, str_split(substr($intPart, $preLength), $groupLength));
}
$result = $sign.$intPart;
if ($precision === null) {
if ($floatPath !== '') {
$result .= $decimal.$floatPath;
if (is_nan($number)) {
$result = $data['symbols']['nan'];
} elseif (is_infinite($number)) {
$result = $sign . $data['symbols']['infinity'];
} else {
$precision = is_numeric($precision) ? (int) $precision : null;
if ($precision !== null) {
$value = round($value, $precision);
}
$decimal = $data['symbols']['decimal'];
$groupLength = (isset($data['groupLength']) && is_numeric($data['groupLength'])) ? (int) $data['groupLength'] : 3;
$full = explode('.', (string) $value, 2);
$intPart = $full[0];
$floatPath = count($full) > 1 ? $full[1] : '';
$len = strlen($intPart);
if (($groupLength > 0) && ($len > $groupLength)) {
$groupSign = $data['symbols']['group'];
$preLength = 1 + (($len - 1) % 3);
$pre = substr($intPart, 0, $preLength);
$intPart = $pre.$groupSign.implode($groupSign, str_split(substr($intPart, $preLength), $groupLength));
}
$result = $sign.$intPart;
if ($precision === null) {
if ($floatPath !== '') {
$result .= $decimal.$floatPath;
}
} elseif ($precision > 0) {
$result .= $decimal.substr(str_pad($floatPath, $precision, '0', STR_PAD_RIGHT), 0, $precision);
}
} elseif ($precision > 0) {
$result .= $decimal.substr(str_pad($floatPath, $precision, '0', STR_PAD_RIGHT), 0, $precision);
}
}

Expand Down
3 changes: 3 additions & 0 deletions tests/Number/NumberTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ public function providerFormat()
array('-1,234.57', '-1234.567', 2, 'en'),
array('1,234.57', '1234.567', 2, 'en'),
array('1,234.00', '1234', 2, 'en'),
array('NaN', NAN, null, 'en'),
array('∞', INF, null, 'en'),
array('-∞', -INF, null, 'en'),
array('', '', null, 'en'),
array('', false, null, 'en'),
array('', null, null, 'en'),
Expand Down

0 comments on commit f894a4b

Please sign in to comment.