【问题标题】:PHP Division with variables, not working带有变量的PHP分区,不起作用
【发布时间】:2013-08-31 18:36:08
【问题描述】:

我在电子商务网站上划分购物车总额以创建客户支付的存款金额时遇到了一些困难。

如下所示,我试图将订单总额的 25% 显示为存款金额。但是,我尝试了很多变体,都返回“0”。

如果我独立地回显任何变量,它们会回显正确的值,但是当一个除以另一个时,结果每次都是“0”。

感谢任何帮助,我觉得我错过了一些非常简单的东西..

谢谢

<?php $amount = $woocommerce->cart->get_total(); ?>
                            <?php $percent = 4; ?>
                            <?php $deposit = $amount / $percent; ?>


                            <strong><?php echo $deposit; ?></strong>

【问题讨论】:

  • echo $amount; 输出什么?
  • 购物车总额.. 在这种特殊情况下,1200 美元左右。
  • 你的意思是var_dump($amount);?是这样的:string(41) " $1,022.29 "

标签: php wordpress woocommerce


【解决方案1】:

如果金额的输出有货币符号,您可以通过使用 floatval 获取浮点值来去除货币符号

<?php $amount = $woocommerce->cart->get_total(); ?>
                            <?php $percent = 4; ?>
                            <?php $deposit = floatval($amount) / $percent; ?>


                            <strong><?php echo $deposit; ?></strong>

【讨论】:

  • 感谢您的建议,但我仍然收到“0”返回。该值在数字前确实包含一个 $,但是当我 echo (float)$amount; 时,我得到一个“0”。当我echo $amount 我得到了价值。
【解决方案2】:

尝试使用强制转换 -> (field_type)

<?php $amount = $woocommerce->cart->get_total(); ?>
                            <?php $percent = 4; ?>
                            <?php $deposit = (float)$amount / (int)$percent; ?>


                            <strong><?php echo $deposit; ?></strong>

通过 cast,您可以从一种类型转换为另一种类型。

例如,如果使用 $woocommerce->cart->get_total(); 你会得到 string,使用 (float) 你转换成 float

PHP.NET about casting

【讨论】:

    【解决方案3】:

    $commerce-&gt;cart-&gt;get_total(); 函数响应输出,例如 &lt;span class="amount"&gt;560&amp;nbsp;&amp;euro;&lt;/span&gt; ($1,022.29),您需要将其转换为数字,以便从金额中获得费用 (25%)。

    首先这里的问题是get_total()函数响应的是一个字符串。

    修复此字符串的正确方法是一个简单的示例,例如

    <?php
        $totalAmountString = $commerce->cart->get_total(); //<span class="amount">560&nbsp;&euro;</span>
        $totalAmountString = strip_tags($totalAmountString); //get rid of the span - we're left with "560&nbsp;&euro;"
        $totalAmountString = str_replace(array("&nbsp;&#38;", ","), "", $totalAmountString);
        $totalAmountFloat = (float)$totalAmountString;
        $percentage = 0.25;
        $deposit = $totalAmountFloat * $percentage;
    
        var_dump($deposit);
    ?>
    

    我们正在删除所有的 html。当您 var_dump 的字符串长度为 41 时,我知道这就是问题所在。它在字符串中返回 span 标签和 html。您只能看到数字,因为 html 是隐藏的。这行$totalAmountString = str_replace(array("&amp;nbsp;&amp;#38;", ","), "", $totalAmountString); 可能需要根据使用的货币符号进行编辑,&amp;#38 是美元,但可以通过两种或三种不同的方式完成。希望这会有所帮助。

    【讨论】:

    • &lt;?php $amount = $woocommerce-&gt;cart-&gt;get_total(); ?&gt; &lt;?php $percent = 0.25; ?&gt; &lt;?php $deposit = $amount * $percent; ?&gt; &lt;strong&gt;&lt;?php echo $deposit; ?&gt;&lt;/strong&gt; \ 这也返回 0.. 它应该返回 get_total 值的 25%.. 我想不通。
    • 如果返回 0,那么您的 $amount 不是 int 或`float。出于测试目的,请var_dump($amount); 告诉我它的内容。然后我就可以在前进的道路上编写代码/提供建议。
    • 是这个:string(41) " $1,022.29 " 谢谢你的帮助,我很感激
    • 好的,所以如果它周围有空格,如您的示例中那样,则执行此操作&lt;?php $amount = (float)trim($amount); ?&gt;,否则执行此操作&lt;?php $amount = (float) $amount; ?&gt;
    • &lt;?php $amount = $woocommerce-&gt;cart-&gt;get_total(); ?&gt; &lt;?php $amount = (float)trim($amount); ?&gt; &lt;?php $percent = 0.25; ?&gt; &lt;?php $deposit = $amount * $percent; ?&gt; &lt;?php echo $amount.' '.$deposit ?&gt; &lt;?php var_dump($amount); ?&gt; 当使用浮动和修剪时,我得到的金额为 0。这是页面上看到的总结果:0 0 float(0)任何想法@Vector?
    【解决方案4】:

    如果$amount 的值是“$1,022.29”的形式,试试这个:

    <?php $amount = $woocommerce->cart->get_total(); ?>
                                <?php $percent = 4; ?>
                                <?php $deposit = preg_replace('/^( \$)?([0-9.]+) ?$/', '$2', str_replace(',', '', $amount)) / $percent; ?>
    
    
                                <strong><?php echo $deposit; ?></strong>
    

    【讨论】:

    • 谢谢。这将返回“0”。但是,它是int,所以这是一个好兆头。
    • 如果你运行这个会发生什么? var_dump(preg_replace('/^( \$)?([0-9.]+) ?$/', '$2', str_replace(',', '', $amount)));
    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2015-06-16
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多