Я работаю с файлами CSV, а Excel часто форматирует цены следующим образом:
$ 384.642,54
Где десятичное число 54. Мне нужно округлить это число до 384.643
(всегда округлять).
Сначала я удалил пробелы и знак $, который выделяет Excel в ячейке.
Теперь у меня есть этот номер 384.642,54
, Мне нужно, чтобы PHP знал, что десятичная дробь — это кома, а точка — это разделитель тысяч, а затем округлите его.
Я не смог добиться этого с помощью number_format. Это возвращает меня 384
Там вы идете:
$number = str_replace('.', '', $number);
$number = str_replace(',', '.', $number);
$number = ceil($number);
Самое простое и наименее сложное решение: используйте str_replace
заменить точки на пустую строку; затем используйте его снова, чтобы заменить запятую на точку; затем используйте floatval
чтобы преобразовать строку в число, а затем округлить ее так, как вы хотите:
$result = round(floatval(str_replace(',', '.', str_replace('.', '', '384.642,54'))));
Как указано в моем комментарии, наименее инвазивным способом является str_replace () нежелательных частей. А потом использовать ceil()
округлить.
$num = '$ 384.642,54';
//- replace not wanted characters with ''
$num = str_replace(array('$',' ','.'), '');
//- convert the comma to decimal point, and transform it to a float
$num = floatval(str_replace(',','.'));
echo ceil($num);
При желании вы можете использовать preg_replace () для «умного» замещения вещей, но для этой настройки это не выгодно.
$num = '$ 384.642,54';
echo number_format(
ceil(
str_replace(
array('.', '$', ' ', ','),
array('', '', '', '.'),
$num
)
), 0, '', '.'
);