1 回答
TA贡献1818条经验 获得超3个赞
下面将处理它。在第一个块中,我模拟了您的数据,然后foreach从您的问题中运行完全相同的数据来比较输出。
最后,在第三个块中,我向您展示了计算总数的代码,并将输出格式设置为货币。
{* Sample code to simulate your data *}
{assign var="products" value=[
['service' => '0,30 €'],
['service' => '0,10 €'],
['service' => '0,20 €']
]}
{* Original code, exactly as showed in the question *}
{foreach $products as $product}
{$product.service}
{/foreach}
{* This is the new code for calculating the total *}
{assign var="total" value=0}
{foreach $products as $product}
{assign var="total" value=$total + $product.service|replace:' €':''|replace:',':'.'}
{/foreach}
Total: {$total|number_format:2:",":''} €
输出:
0,30 € 0,10 € 0,20 € Total: 0,60 €
但是正如您已经知道的那样,这非常棘手,通常不应在模板内处理,原因如下:
像上面那样进行字符串替换以从service属性中删除欧元符号是非常脆弱的。
您不应在模板内创建新变量。它们应该在您的业务规则类中计算。
通常,您应该在将欧元符号添加到字符串之前进行求和,因为将字符串解析回数字总是很脆弱的。即使您将来在service属性中进行一个小的更改(例如将其存储为 '€0,30' 而不是 '0,30 €' ,也足以打破求和逻辑。
- 1 回答
- 0 关注
- 159 浏览
添加回答
举报
