php smarty рассчитать ставки

У меня есть формула, которую я хочу написать в 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"}

Каким-то образом смешивание со всеми пауами неправильно, и я не понимаю, как это сделать.

3

Решение

Это скелет плагина 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 и возвращаемое значение заменит вызов функции.

Для форматирования результата вы можете либо изменить код плагина, чтобы получить дополнительный параметр $format и вернуть значение в виде отформатированной строки или вы можете предоставить ему другой параметр assign содержащий имя Smarty переменная, где он будет хранить результат или оба (как {math} делает).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]