2014-10-02 5 views
0

Я работаю с CSV-файлами и Excel часто ценами в формате, как это:Разобрать число с точкой в ​​качестве разделителя и запятой в качестве десятичного разделителя

$ 384.642,54 

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

Первое, что я сделал: Удалите пробелы и знак $, который Excel помещает в ячейку. У меня теперь есть этот номер 384.642,54. Мне нужно, чтобы PHP знал, что десятичная цифра - это Coma, а точка - это тысячный разделитель, а затем вокруг него.

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

ответ

1

Там вы идете:

$number = str_replace('.', '', $number); 
$number = str_replace(',', '.', $number); 
$number = ceil($number); 
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

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

$result = round(floatval(str_replace(',', '.', str_replace('.', '', '384.642,54')))); 
0
$num = '$ 384.642,54'; 
echo number_format(
    ceil(
    str_replace(
    array('.', '$', ' ', ','), 
    array('', '', '', '.'), 
    $num 
    ) 
), 0, '', '.' 
); 
Смежные вопросы