【问题标题】:php smarty calculate ratesphp smarty计算费率
【发布时间】:2015-01-23 15:14:05
【问题描述】:

我想用 smarty 写一个公式。因为公式有多个 pow(),所以它变得很棘手并且似乎无论如何都不起作用。

这是公式:

rate = Kapital*((Zinssatz_Effektiv/100+1)^(1/12))^Monate/((((Zinssatz_Effektiv/100+1)^(1/12))^Monate)-1)*(((Zinssatz_Effektiv/100+1)^(1/12))-1)

我在 smarty 中的尝试看起来是这样的:

{math equation="x*((y/100+1)pow(1/12))pow z/((((y/100+1)pow(1/12))powz)-1)*(((y/100+1)pow(1/12))-1)" x=$Kapital y=$Zinssatz_Effektiv z=$Monate format="%.2f"}

不知何故,与所有 pow 混合是错误的,我不知道如何制作它。

【问题讨论】:

  • 对于非德国人:Zinssatz = 费用; Monate = 月;资本 = 基金/资本;
  • 还有 Zinssatz_Effektiv = 实际费用
  • 建议#1:移动PHP代码中的所有计算,分配计算值,格式化并显示在模板中。建议#2(如果#1不好,你需要多次使用相同的公式多次模板):编写一个实现模板功能的smarty插件。这并不难。阅读documentation或查看Smarty绑定的函数源代码。
  • 我添加了一个实现建议 #2 的答案。它只是一个骨架,您需要进行适当的参数验证并实施正确的公式,但您会明白的。

标签: php smarty pow


【解决方案1】:

这是一个 Smarty 插件的骨架,您可以实现它来简化计算。

实现

在所有页面中包含的文件中编写以下函数:

function smarty_function_rate($params, Smarty_Internal_Template $template)
{
    // Validate input parameters
    // ... verify here that all the parameters are provided, 
    // call $smarty->trigger_error() to report invalid or missing values

    // Example
    if (! isset($params['kapital']) || floatval($params['kapital']) < 0) {
        $smarty->trigger_error("Parameter 'kapital' is mission or it have an invalid value. A number greater than zero was expected.", E_USER_ERROR, __FILE__, __LINE__);
    }
 

    // Extract the values
    $kapital  = $params['kapital'];
    $zinssatz = $params['zinssatz']
    $monate   = $params['monate'];

    // Do the complex calculation here using $kapital, $zinssatz, $monate
    $rate = $kapital * 0.01;      // this is NOT the formula :-)
    // And return the value
    return $rate;
}

你可以随意命名,这只是一个例子。

注册

为了让 Smarty 知道您的新插件,您必须注册它。 您可以在实例化 Smarty 对象后立即执行此操作,或者仅在需要它的页面中执行此操作,如您所愿。

$smarty->registerPlugin('function', 'rate', 'smarty_function_rate');

这里,function 是插件类型(template function),不要乱说,rate 是函数的名称,你在模板中如何调用它(如{rate kapital=123},你如果您愿意,可以使用其他名称),smarty_function_rate 是实现插件的函数的名称,如上所述。如果您为函数使用不同的名称,那么也要在注册调用中更改它。

注意: Smarty 2 有不同的方法来注册每种类型的插件,并且它们少了一个参数(当然是插件类型)。 Smarty 2中函数的方法是register_function()

用法:

您可以在与Smarty绑定的功能类似的模板中使用新功能{rate},例如{math}{assign}

{rate kapital=1000 zinssatz=5 monate=12}

在运行时,smarty_function_rate() 函数将被调用,kapitalzinssatzmonate 作为 $param 中的键,它返回的值将替换函数调用。

对于结果的格式,您可以修改插件的代码以获取附加参数 $format 并将值作为格式化字符串返回,或者您可以提供另一个参数 assign 包含 @987654342 的名称@ 变量,它将存储结果或两者都存储(如 {math} 所做的那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多