/** * Alternative number_format() to accommodate multibyte decimals and thousands < PHP 5.4 * * @param float $number * @param integer $places * @param string $decimals * @param string $thousands * @return string */ protected static function _numberFormat($number, $places = 0, $decimals = '.', $thousands = ',') { if (!isset(self::$_numberFormatSupport)) { self::$_numberFormatSupport = version_compare(PHP_VERSION, '5.4.0', '>='); } if (self::$_numberFormatSupport) { return number_format($number, $places, $decimals, $thousands); } $number = number_format($number, $places, '.', ''); $after = ''; $foundDecimal = strpos($number, '.'); if ($foundDecimal !== false) { $after = substr($number, $foundDecimal); $number = substr($number, 0, $foundDecimal); } while (($foundThousand = preg_replace('/(\\d+)(\\d\\d\\d)/', '\\1 \\2', $number)) != $number) { $number = $foundThousand; } $number .= $after; return strtr($number, array(' ' => $thousands, '.' => $decimals)); }