【问题标题】:PHP format number before insert into database插入数据库之前的PHP格式号
【发布时间】:2015-09-08 03:09:25
【问题描述】:

我正在使用 $_POST 将表单值发送到 PHP,然后插入到数据库中,我有一些 prices 值的输入,如下所示:

1.000.000,00(100 万巴西雷亚尔“巴西雷亚尔”)

我需要将其转换为 1000000.00(DECIMAL(10,2) 插入数据库)

如何使用 PHP number_format() 做到这一点?

谢谢!

编辑

如果number_format() 不是我正在寻找的函数,那么在这种情况下最好使用什么?

另外,我需要帮助找到解决方案,即使用户值为 100.000,00

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    1. 你不能用数字格式来做到这一点,它可以以其他方式工作。
    2. 您做的事情是不好的做法,视图层应该将原始数据发送到控制器 - 如果您使用一些高级 javascript 组件来表示用户格式化的数字,那很好,但是底层表单控件应该发送原始数据,即 10000000.00

    现在,如果我对您说的任何内容在这个特定时刻都不适用,并且记住您发送的这种格式是固定的(点表示千位分隔符,逗号表示小数分隔符),您可以清理使用简单的 str_replace 值。

    但是,诀窍是将第一个点替换为空字符串,然后将逗号替换为点。

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

    知道了吗?

    但要知道,你正在做的是糟糕的方法和错误的实施,最终,它会咬你一口**。

    【讨论】:

    • 我正在使用 jQuery Mask 插件,所以用户不能在这些输入中插入任何内容,并且值作为 Mask,这就是为什么我需要清理它并转换以保存到数据库中.
    • @WilliamXavier 我没有使用过 jQuery Mask 插件,但它似乎不太可能如此不灵活,以至于您无法以某种方式从元素中获取未格式化的值。我完全同意这个答案。它不应该是你用 PHP 做的事情。
    • 我通常为表单控件构建自己的 jQuery 插件。我通常的做法是拥有“可见”表单字段(例如,没有名称属性的文本字段 - 它不会通过提交发送)并隐藏字段。现在,当可见字段更改时,隐藏的值会更新为干净的值。在表单提交时 - 隐藏字段以干净、原始的值发送到服务器。这是我的方法,我强烈推荐。
    • 对于大多数插件 -> 您可以将它们与您的插件一起包装,请参见示例:github.com/RunOpenCode/dmDateTimePickerPlugin 这样您就不必编写自己的插件来实现相同的效果。
    【解决方案2】:
    <?php
    $number  = '1.000.000,00';
    $replaced_number = str_replace(array('.',','), array('',''), $number);
    echo number_format($replaced_number,2,'.','');
    ?>
    

    【讨论】:

      【解决方案3】:

      最简单的方法是使用str_replace()函数:

      <?php
      $p = '1.000.000,00';
      $p = str_replace('.', '', $p);
      $p = str_replace(',', '.', $p);
      echo $p;
      

      【讨论】:

        【解决方案4】:

        先将 (.) 和 (,) 替换为 str_replace by '' 然后使用下面的函数

        number_format($replaced_number,$decimal)

        【讨论】:

          【解决方案5】:

          如果您查看 php.net,您将很容易看到适合您目标的正确语法: number_format($number,2,'.','') 第一个参数是在您的情况下为 2 的小数位数。 第二个是用于小数点分隔符的符号,第三个是用于千位的符号,在你的情况下它什么都不是。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-05
            • 1970-01-01
            • 2015-03-07
            相关资源
            最近更新 更多