80553
  
  
以下のようなphpコードを記述をしました。

表示結果は

[code]

    Bonus : 30000 JPY
    
[/code]

となります。この数値（金額）を3桁のカンマ区切りで  
**30,000** としたいと思います。

インスタンスの引数の$priceに30,000と入れ以下のように

[code]

    $cost = new PremiumPost('Bonus', 30,000);
    $cost->show();
    
[/code]

記述すると

[code]

    Bonus : 30 JPY
    
[/code]

と表示されます。  
2つの引数の区切りは ('Bonus', 30000) とカンマ(,) を使うので実際難しいと思います。  
number_format()を上手く使えば出来るかなと思い

[code]

    printf ('%s : number_format(%d) JPY',$this->text,$this->price);
    
[/code]

とやってみたり

[code]

    private number_format($price)
    
[/code]

とやったり初心者ながら色々試したのですがうまくいきません。

ここで表示される数値(金額) を

[code]

    Bonus : 30000 JPY
    
[/code]

ではなく

[code]

    Bonus : 30,000 JPY
    
[/code]

と **3桁のカンマ区切りで表示** させることは可能ですか？

その方法をご存じの方いらっしゃいましたら教えて下さい。  
よろしくお願いいたします。

＜以下が実際の記述＞

* * *
[code]

    <?php
    
    class PremiumPost
    {
     private $price;
    
     public function __construct($text, $price){
    　$this->text =$text;
    　$this->price = $price;
    　}
    
     public function show(){
     printf ('%s : %d JPY',$this->text,$this->price);
    　}
    }
    
    $cost = new PremiumPost('Bonus', 30000);
    //30,000
    $cost->show();
    
[/code]


CC BY-SA 4.0
2021-08-02T07:58:08.197
80540
2021-08-03T01:00:30.020
42150
question
php
クラスからインスタンスを作りprint()で3桁カンマ区切りの数値を表示させたい


おそらく勘違いされているのは  
`30000`は int型で格納できますが、`30,000`はint型で格納できずstring型になります。

int型は数字だけで表現するためそれ以外の文字を含める場合はstring型に変換する必要があります。

つまりはプログラムで処理しているときはint型だけども、画面に表示するときだけstringとする必要があります。

[code]

    <?php
    
    class PremiumPost
    {
      private $price;
    
      public function __construct($text, $price){
    　  $this->text =$text;
    　  $this->price = $price;
    　}
    
      public function show(){
        printf ('%s : %s JPY', $this->text, number_format($this->price));//表示するときにnumber_formatをかけてstringにする
      }
    }
    
    $cost = new PremiumPost('Bonus', 30000);
    //30,000
    $cost->show();
    
[/code]

ちなみに実際挑戦された内容を添削すると

[code]

    printf ('%s : number_format(%d) JPY',$this->text,$this->price);
    
[/code]

[printf](https://www.php.net/manual/ja/function.printf.php)の第一引数で渡すのはフォーマット文字列です。  
ただの文字列なのでプログラムをその中に書いても実行できません。

[code]

    private number_format($price)
    
[/code]

PHPの[プロパティ](https://www.php.net/manual/ja/language.oop5.properties.php)（クラスのメンバー変数）では変数の宣言をする必要があり関数を実行しても変数の宣言はできません。もしpriceのプロパティをstringとして持っておきたいならばコンストラクタで受け取った引数をnumber_formatで変換する必要があるでしょう。

[code]

    <?php
    
    class PremiumPost
    {
      private string $price;
    
      public function __construct(string $text, int $price){
    　  $this->text =$text;
    　  $this->price = number_format($price);//ここでnumber_formatをかけてしまいstringにしてしまう。
    　}
    
      public function show(){
        printf ('%s : %s JPY', $this->text, $this->price);
      }
    }
    
    $cost = new PremiumPost('Bonus', 30000);
    //30,000
    $cost->show();
    
[/code]

まずは公式のマニュアルを見つつ、プログラムの特徴を捉える癖をつけるとよいでしょう。


CC BY-SA 4.0
2021-08-03T01:00:30.020
80553
2021-08-03T01:00:30.020
22665
80540
answer