首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php智能计算速率

php智能计算速率
EN

Stack Overflow用户
提问于 2015-01-23 15:14:05
回答 1查看 212关注 0票数 3

我有一个公式我想写得很聪明。因为这个公式有不止一个pow(),所以它变得很棘手,而且似乎根本不起作用。

这就是公式:

代码语言:javascript
复制
rate = Kapital*((Zinssatz_Effektiv/100+1)^(1/12))^Monate/((((Zinssatz_Effektiv/100+1)^(1/12))^Monate)-1)*(((Zinssatz_Effektiv/100+1)^(1/12))-1)

我聪明的尝试看起来是这样的:

代码语言:javascript
复制
{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"}

不知怎么的,和所有战俘混在一起是不对的,我不知道怎么做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-23 16:01:54

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

实施

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

代码语言:javascript
复制
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对象,或者只在需要它的页面中实例化它,您就可以这样做。

代码语言:javascript
复制
$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}

代码语言:javascript
复制
{rate kapital=1000 zinssatz=5 monate=12}

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

对于结果的格式设置,您可以修改插件的代码以获得额外的参数$format并以格式化字符串的形式返回值,也可以提供另一个参数assign,其中包含Smarty变量的名称,它将在其中存储结果或两者(就像{math}一样)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28112890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档