В дополнение к ответу ircmaxell:
Если у вас многоязычное программное обеспечение и вы не хотите передавать параметр dec_point и тысяч_септов каждый раз, когда вызываете number_format
, вы можете использовать пользовательскую функцию, которая проверяеттекущая локаль для определения текущей десятичной точки и символа разделителя тысяч, например:
<?php
/**
* Calls {@link number_format} with automatically determining dec_point and thousands_app
* according to the current locale in case they are null or omitted.
* @param float $number The number being formatted.
* @param int $decimals [optional] Sets the number of decimal points.
* @param string|null $dec_point [optional] Decimal point character (determined automatically
* when set to null or omitted).
* @param string|null $thousands_sep [optional] Thousands separator character (determined
* automatically when set to null or omitted).
* @return string
*/
function custom_number_format($number, $decimals = 0, $dec_point = null, $thousands_sep = null) {
$locale = setlocale(LC_NUMERIC, 0); // yes, there is no getlocale()
$def_dec_point = '.';
$def_thousands_sep = ',';
switch (substr($locale, 0, 2)) {
case 'de':
$def_dec_point = ',';
$def_thousands_sep = '.';
break;
case 'fr':
$def_dec_point = ',';
$def_thousands_sep = ' ';
break;
case 'en':
default:
$def_dec_point = '.';
$def_thousands_sep = ',';
}
if (!isset($dec_point)) $dec_point = $def_dec_point;
if (!isset($thousands_sep)) $thousands_sep = $def_thousands_sep;
return number_format($number, $decimals, $dec_point, $thousands_sep);
}
$nr = 1234.56;
setlocale(LC_NUMERIC, 'de_DE');
echo custom_number_format($nr, 2);
# output: 1.234,56
setlocale(LC_NUMERIC, 'en_US');
echo custom_number_format($nr, 2);
# output: 1,234.56
setlocale(LC_NUMERIC, 'fr_FR');
echo custom_number_format($nr, 2);
# output: 1 234,56
# you still can use whatever you want as dec_point and thousands_sep no matter which locale is set
setlocale(LC_NUMERIC, 'de_CH');
echo custom_number_format($nr, 2, '.', "'");
# output: 1'234.56