php smarty计算费率

时间:2015-01-23 15:14:06

标签: php smarty pow

我有一个我想写的聪明的公式。因为公式有多个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"}

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

1 个答案:

答案 0 :(得分:2)

这是您可以实现的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()

用法:

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

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

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

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