今日も一日引きこもりです。台風が近づいているようなので、買い物しておいたほうが良いかな。
さて、セミリタイアのブログなのか疑問になってきましたが、Yii2の話題です。メモして残さないと忘れてしまうので、仕方ない。
問題点
SQLで、10進数の数字を表すdecimalというデータタイプがあるのですが、小数点以下の桁数を指定した場合、Yii2で表示すると必ずその桁数で表示ます。たとえば、小数点以下を3桁と指定すると、1は1.000、13.2は13.200という感じです。そうじゃなく、小数点以下の末尾の0を除いた、1や13.2で表示したいと思ったりします。
Yii2にはformatterという概念があり、数値の表示形式を指定できる(お金なら1200を1,200円とか)のですが、小数点以下の末尾の0を除く形式は用意されていません。
解決方法
希望のフォーマットに変換するFormatterを自作します。まず、Formatterを継承するFormatterHelperを作り、doubleに変換するasDouble関数を定義します。
(補足) 厳密には誤差を気にしないといけないのですが、実用上(小数点以下が10桁以下位までなら)これで十分です。
$ cat common/components/FormatterHelper.php
<?php
namespace common\components;
use yii\i18n\Formatter;
class FormatterHelper extends Formatter {
public function asDouble($value) {
return (double) $value;
}
}Yii2が作成したFormatterHelperを使うようcommon/config/main.phpに設定します。
'components' => [
'formatter' => [
'class' => '\common\components\FormatterHelper',
],
],
使った結果
一例として、GridViewのcolumnsで使ってみます。
'columns' => [
...
[
'attribute' => 'height',
'format' => ['double'],
] ,
[
'attribute' => 'weight',
'format' => ['double'],
] ,こんな感じで0が削除されて表示されます。
