使用点作为千位分隔符和逗号作为小数分隔符解析数字

时间:2014-10-02 19:11:17

标签: php numbers decimal

我正在使用CSV文件和Excel经常格式化这样的价格:

$ 384.642,54

Decimal为54.我需要将此数字舍入384.643(总是向上舍入)。

我首先做的是:删除空格和excel放入单元格的$符号。 我现在拥有的是这个号码384.642,54。我需要PHP才能知道十进制是Coma,而dot是千位分隔符,然后围绕它。

我无法通过number_format实现此目的。它会返回384

4 个答案:

答案 0 :(得分:1)

你去了:

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

答案 1 :(得分: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()来实现智能'替换东西,但对于这种设置,它不符合成本效益。

答案 2 :(得分:1)

最简单且涉及最少的解决方案:使用str_replace用空字符串替换点;然后再次使用它用点替换逗号;然后使用floatval将字符串转换为数字,然后以任意方式将其舍入:

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

答案 3 :(得分:0)

$num = '$ 384.642,54';
echo number_format(
  ceil(
    str_replace(
     array('.', '$', ' ', ','), 
     array('', '', '', '.'), 
     $num
    )
  ), 0, '', '.'
);