回答編集履歴

3 追記

Kosuke_Shibuya

Kosuke_Shibuya score 17615

2017/03/04 19:59  投稿

実現方法2つ挙げておきました。
#index.php
```php
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
require 'vendor/autoload.php';
// コンストラクタ
$smarty = new Smarty();
$smarty->addPluginsDir('plugins');
// 強制コンパイル
$smarty->force_compile = true;
// XSS対策
$smarty->escape_html = true;
// 税率
$tax_rate = 1.08;
$smarty->assign('tax_rate', $tax_rate);
$price = 997;
$smarty->assign('price', $price);
$smarty->display('index.tpl');
```
#index.tpl
```html
<!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <p>{($price * $tax_rate)|floor|number_format|default:0}</p>
       <p>{$price|add_tax|number_format|default:0}</p>
   </body>
</html>
```
#plugins/modifier.add_tax.php
```php
<?php
/**
* plugins/modifier.add_tax.php
*
*/
function smarty_modifier_add_tax($price)
{
   return floor($price * 1.08);
}
```
```
---
税率は変更されるものなので、「基準日」の概念も必要となりますね。
2 少数部分を切り捨てる処理を追加

Kosuke_Shibuya

Kosuke_Shibuya score 17615

2017/03/04 19:54  投稿

実現方法2つ挙げておきました。
#index.php
```php
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
require 'vendor/autoload.php';
// コンストラクタ
$smarty = new Smarty();
$smarty->addPluginsDir('plugins');
// 強制コンパイル
$smarty->force_compile = true;
// XSS対策
$smarty->escape_html = true;
// 税率
$tax_rate = 1.08;
$smarty->assign('tax_rate', $tax_rate);
$price = 10000;
$price = 997;
$smarty->assign('price', $price);
$smarty->display('index.tpl');
```
#index.tpl
```html
<!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <p>{($price * $tax_rate)|number_format|default:0}</p>
       <p>{($price * $tax_rate)|floor|number_format|default:0}</p>
       <p>{$price|add_tax|number_format|default:0}</p>
   </body>
</html>
```
#plugins/modifier.add_tax.php
```php
<?php
/**
* plugins/modifier.add_tax.php
*
*/
function smarty_modifier_add_tax($price)
{
   return $price * 1.08;
   return floor($price * 1.08);
}
```
1 追記

Kosuke_Shibuya

Kosuke_Shibuya score 17615

2017/03/04 19:31  投稿

実現方法2つ挙げておきました。
#index.php
```php
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
require 'vendor/autoload.php';
// コンストラクタ
$smarty = new Smarty();
$smarty->addPluginsDir('plugins');
// 強制コンパイル
$smarty->force_compile = true;
 
// XSS対策  
$smarty->escape_html = true;  
// 税率
$tax_rate = 1.08;
$smarty->assign('tax_rate', $tax_rate);
$price = 10000;
$smarty->assign('price', $price);
$smarty->display('index.tpl');
```
#index.tpl
```html
<!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <p>{($price * $tax_rate)|number_format|default:0}</p>
       <p>{$price|add_tax|number_format|default:0}</p>
   </body>
</html>
```
#plugins/modifier.add_tax.php
```php
<?php
/**
* plugins/modifier.add_tax.php
*
*/
function smarty_modifier_add_tax($price)
{
   return $price * 1.08;
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る