2017-11-01 10 views
2

これは現在、この関数を複数回呼び出されたコントローラで使用しています。Yii2浮動小数点型の文字列をフォーマットするgetterおよびsetter

public function formatFloat($value) 
{ 
    return (float)sprintf('%0.6f', $value); 
} 

だから私はゲッターとセッターを使用しようとしていますので、私はちょうど

$model->$whatever; 

を使用することができますし、フォーマットが行われます。私のモデルでは

私は

public function getChargePeak() 
{ 
    return $this->charge_peak; 
} 

public function setChargePeak($value) 
{ 
    return $this->charge_peak = (float)sprintf('%0.6f', $value); 
} 

を持っていますが、charge_peakプロパティは文字列として格納されている場合、それはまだ文字列

+0

ましたデータ型はcharge_peakプロパティですか? – scaisEdge

+0

浮動小数点に変換しようとしている文字列 – Kyle

答えて

1

として戻っている

$peak = $model->chargepeak; 
    var_dump($peak);die; 

をするとき、あなたはフロートを必要としますあなたのアプリで使用する必要があります

public function getChargePeak() 
{ 
    return floatval($this->charge_peak); 
} 

アプリ内の値を使用してとにかくあなたが

http://php.net/manual/en/function.floatval.php

+0

文字通り、それを使って解決しました。 'public function getChargePeak() { return(float)sprintf( '%0.6f'、$ this-> charge_peak); } ' – Kyle

+0

うーん...私はあなたのデータベースとPHPのアプリケーションで同じタイプの使用をお勧めします – scaisEdge

+0

あなたのソリューションはクリーナーですので、私は答えとしてそれを受け入れますが、どちらも動作します。ありがとうございました。 – Kyle

0

..一貫した方法で値を格納する必要がありますので、私はuの別のパターンをお勧め:デコレータとヘルパーを。要求からデータを取得し、モデルの準備をして、それを表示するためにだけコントローラを使用する必要があります。

値の書式設定はヘルパーロジックです。例えば表示する

namespace common\models\decorators; 

class YourModelDecorator 
{ 

    /** 
    * YourModel 
    */ 
    private $model; 

    public function __construct(YourModel $model) 
    { 
     $this->model = $model; 
    } 

    public function __get($name) 
    { 
     $methodName = 'get' . $name; 
     if (method_exists(self::class, $methodName)) { 
      return $this->$methodName(); 
     } else { 
      return $this->model->{$name}; 
     } 
    } 

    public function __call($name, $arguments) 
    { 
     return $this->model->$name($arguments); 
    } 

    public function getChargePeak() 
    { 
     return \common\helpers\Number::formatFloat($this->model->charge_peak); 
    } 
} 

をし、それを送信します:だから、共通の\ヘルパー\新しいクラス を作成\ Number.php

namespace common\helpers; 

class Number 
{ 
    public static function formatFloat($value) 
    { 
     return (float)sprintf('%0.6f', $value); 
    } 
} 

は、その後、あなたのモデルのデコレータを作成

public function actionView($id) 
{ 
    $model = $this->loadModel($id); 

    $this->render('view', [ 
     'model' => new \common\models\decorators\YourModelDecorator($model) 
    ]); 
} 
関連する問題