80502


教材を元に自分で試してみた記述です。  
抽象クラスや抽象メソッドについての学習中ですので読みにくい記述となっています。

以下のようにPHPを記述しました。  
これは

[code]

    class PremiumPost extends BasePost
    
[/code]

内の話になります。  
printf
の$priceで金額を表示しようと変換指定子公式ページを参考に【%d】と指定し、カンマで区切った桁区切りの金額「300,000,000」を引数に渡すとカンマ以下は表示されず「300」と出ます。  
そこで【%d】以外に【%f】や数値に関する変換指定子を試してみたのですが駄目でした。  
結局文字列を示す【%s】を指定し、シングルクオーテーション「'300,000,000'」で$priceで表示したい値を囲むとうまく行きました。

浮動小数点の場合は【%f】を使い小数点以下の桁数などを表示できるというのは学習しました。  
カンマで桁を区切った値を「文字列」ではなく「数値」として表示する方法はあるのでしょうか？  
素朴な質問です。  
よろしくお願いいたします。

[code]

    public function show(){
     printf('%s Medal, Bonus[%d JPY] ',$this->text, $this->price);
     }
    
    $posts[3] = new PremiumPost('Gold',300,000,000);
    
[/code]

指定子の一覧  
[https://www.php.net/manual/ja/function.sprintf.php](https://ja.stackoverflow.com/questions/ask)

＜表示結果＞

[code]

    Morning!
    Hello!
    Olympic Sponsored by TOYOTA
    Gold Medal, Bonus[300 JPY]
    
[/code]

記述

[code]

    <?php
    
    abstract class BasePost{
    　protected $text;
      public function __construct($text){
        $this->text = $text;
      }
    
      public abstract function show();
    }
    
    class Post extends BasePost
    {
      public function show(){
        printf('%s',$this->text);
      }
    }
    
    class SponsoredPost extends BasePost
    {
     private $sponsor;
     public function __construct($text, $sponsor){
     parent::__construct($text);
     $this->sponsor = $sponsor;
     }
    
     public function show(){
     printf('%s Sponsored by %s',$this->text, $this->sponsor);
     }
    }
    
    class PremiumPost extends BasePost
    {
     private $price;
    
     public function __construct($text, $price){
     parent::__construct($text);
     $this->price = $price;
     }
    
     public function show(){
     printf('%s Medal, Bonus[%d JPY] ',$this->text, $this->price);
     }
    }
    
    $spots=[];
    $posts[0] = new Post('Morning!');
    $posts[1] = new Post('Hello!');
    $posts[2] = new SponsoredPost('Olympic', 'TOYOTA');
    $posts[3] = new PremiumPost('Gold','300,000,000');
    
    function processPost(BasePost $post){
      $post->show();
      echo "<br>";
    }
    
    foreach ($posts as $post){
      processPost($post);
    }
    ?>
    
[/code]


CC BY-SA 4.0
2021-07-31T07:00:56.717
80501
2021-07-31T07:26:01.693
42150
question
php
printf の変換指定子でカンマで桁を区切った場合の対処法


まず引数として桁区切りの値を渡す時、以下の記述では (人間が見ても) `Gold` と `300,000,000` なのか、`Gold`, `300`,
`000`, `000` の引数4つなのか判断するのが難しいと思います。

[code]

    PremiumPost('Gold',300,000,000);
    
[/code]

表示の際に桁区切りをしたいなら、`number_format` を使う方法があるようです。

**参考:**  
[数字の表記を3桁のカンマ区切りに - number_format()](https://webkaru.net/php/number-format/)

[code]

    <?php
    $num = 100000000;
    $num = number_format($num);
    print $num . "円";          # 100,000,000円
    ?>
    
[/code]


CC BY-SA 4.0
2021-07-31T07:26:01.693
80502
2021-07-31T07:26:01.693
3060
80501
answer