php smarty 计算率
php smarty calculate rates
我想用 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"}
不知何故,与所有 pows 的混合是错误的,我不知道如何制作它。
这是您可以实施以简化计算的 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()
函数将被调用,其中 kapital
、zinssatz
和 monate
作为 $param
中的键,其值为 returns 将替换函数调用。
对于结果的格式,您可以修改插件的代码以获取附加参数 $format
和 return 作为格式化字符串的值,或者您可以为其提供另一个参数 assign
包含 Smarty
变量的名称,它将存储结果或两者(如 {math}
那样)。
我想用 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"}
不知何故,与所有 pows 的混合是错误的,我不知道如何制作它。
这是您可以实施以简化计算的 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()
函数将被调用,其中 kapital
、zinssatz
和 monate
作为 $param
中的键,其值为 returns 将替换函数调用。
对于结果的格式,您可以修改插件的代码以获取附加参数 $format
和 return 作为格式化字符串的值,或者您可以为其提供另一个参数 assign
包含 Smarty
变量的名称,它将存储结果或两者(如 {math}
那样)。