【问题标题】:Parse a number with dot as thousand separator and comma as decimal separator解析以点为千位分隔符和逗号为小数分隔符的数字
【发布时间】:2014-11-27 20:35:40
【问题描述】:

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

$ 384.642,54

小数点是 54。我需要将此数字四舍五入为 384.643(始终向上舍入)。

我首先要做的是:删除空格和excel放在单元格中的$符号。 我现在拥有的是这个号码384.642,54。我需要 PHP 知道小数点是逗号,点是千位分隔符,然后四舍五入。

我无法使用 number_format 实现这一点。它返回给我384

【问题讨论】:

    标签: php numbers decimal


    【解决方案1】:

    你去吧:

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

    【讨论】:

      【解决方案2】:

      正如我在评论中所说,侵入性最小的方法是 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() 来“智能”替换东西,但对于这种设置,它并不划算。

      【讨论】:

        【解决方案3】:

        最简单且最少涉及的解决方案:使用str_replace 将点替换为空字符串;然后再次使用它来用点替换逗号;然后使用floatval 将字符串转换为数字,然后以任何你想要的方式对其进行四舍五入:

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

        【讨论】:

          【解决方案4】:
          $num = '$ 384.642,54';
          echo number_format(
            ceil(
              str_replace(
               array('.', '$', ' ', ','), 
               array('', '', '', '.'), 
               $num
              )
            ), 0, '', '.'
          );
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-30
            • 1970-01-01
            • 2020-05-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多