用聪明的数学方法扣除百分比

时间:2014-07-15 14:53:13

标签: php smarty

不确定如何在Smarty中执行此操作,但这是我正在尝试做的事情。

从价格中扣除25.5%。

{math assign="$percentage" equation="(x - y)" x=$product.price y="25.5%" format="%.2f"}
{$percentage}

但是我发现正在做

y="25.5%"

不起作用,我已经尝试过研究最佳实践,但到目前为止我没有发现我理解的......

任何想法都非常受欢迎;)

3 个答案:

答案 0 :(得分:1)

首先 - 如果可能的话,你应该在PHP中进行这样的计算,并将结果简单地分配给Smarty。在大多数情况下,这是最好的方式。你还需要注意:

  

{math}由于使用了它而在性能上是一项昂贵的功能   php eval()函数。用PHP进行数学运算会更有效率   尽可能在脚本中进行数学计算并赋值()   结果到模板。绝对避免重复{math}   函数调用,例如在{section}循环中。

但是,让我们假设您仍然希望直接在Smarty中进行此操作

首先,当你在数学中使用赋值时,你不应该在变量名之前使用$,因此它应该是{math assign="percentage"而不是{math assign="$percentage"

你不能在y中使用百分比,所以你需要这样做:

{math assign="percentage" equation="(100-y)/100 * x" x=$product.price y="25.5" format="%.2f"}
{$percentage}

或者这样

{math assign="percentage" equation="(1-y/100) * x" x=$product.price y="25.5" format="%.2f"}
{$percentage}

或者你应该简单地将25.5作为y传递但是已经将它除以100,所以0.255如下所示

{math assign="percentage" equation="(1-y) * x" x=$product.price y="0.255" format="%.2f"}
{$percentage}

所有这些方法都会产生相同的预期结果。

答案 1 :(得分:1)

您不需要使用mathassign,只需直接进行计算,但正如Mark Ba​​ker所说,$y需要是一个数字(0.255),而不是百分比字符串:

{($product.price - ($product.price * $y))|string_format:"%.2f%%"}

您可以将百分比字符放在Smarty标记之外,但我已将其放在string_format中,因此它是自包含的。

答案 2 :(得分:0)

我对Smarty一点都不熟悉,但是您需要将价格乘以百分比(表示为从0到1的十进制值)来获得折扣,然后从原始价格中减去该值。所以,您正在寻找的等式是:

x - (.255 * x)

在Smarty中可能有效或无效:

{math assign="$percentage" equation="(x - (.255 * x))" x=$product.price format="%.2f"}