Разобрать число с точкой в ​​качестве разделителя тысяч и запятой в качестве десятичного разделителя

Я работаю с файлами CSV, а Excel часто форматирует цены следующим образом:

$ 384.642,54

Где десятичное число 54. Мне нужно округлить это число до 384.643 (всегда округлять).

Сначала я удалил пробелы и знак $, который выделяет Excel в ячейке.
Теперь у меня есть этот номер 384.642,54, Мне нужно, чтобы PHP знал, что десятичная дробь — это кома, а точка — это разделитель тысяч, а затем округлите его.

Я не смог добиться этого с помощью number_format. Это возвращает меня 384

0

Решение

Там вы идете:

$number = str_replace('.', '', $number);
$number = str_replace(',', '.', $number);
$number = ceil($number);
1

Другие решения

Самое простое и наименее сложное решение: используйте str_replace заменить точки на пустую строку; затем используйте его снова, чтобы заменить запятую на точку; затем используйте floatval чтобы преобразовать строку в число, а затем округлить ее так, как вы хотите:

$result = round(floatval(str_replace(',', '.', str_replace('.', '', '384.642,54'))));
1

Как указано в моем комментарии, наименее инвазивным способом является 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 () для «умного» замещения вещей, но для этой настройки это не выгодно.

1

$num = '$ 384.642,54';
echo number_format(
ceil(
str_replace(
array('.', '$', ' ', ','),
array('', '', '', '.'),
$num
)
), 0, '', '.'
);
0
По вопросам рекламы [email protected]