今日も一日引きこもりです。台風が近づいているようなので、買い物しておいたほうが良いかな。
さて、セミリタイアのブログなのか疑問になってきましたが、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が削除されて表示されます。