2017-12-06 15 views
0

少し前に、桁外れの符号を魔法のように動かすための完全に動作するスクリプトを書きました。私はまだ疑問に思う末尾のゼロを省略するためのPHPフォーマット番号

https://github.com/jenstornell/magic-number-format/blob/master/magic-number-format.php

、この問題をカバーするためにPHPの関数はありますか?私のコードは、あまりにも多くあるような気がします:

<?php 
function magic_number_format($number) { 
    $pos = strpos($number, '.'); 
    $pos = (! $pos) ? strpos($number, ',') : $pos; 

    if($pos) { 
     $count = strlen($number) - $pos - 1; 
     $last = substr($number, -$count); 
     $split = str_split($last); 
     $split = array_reverse($split); 

     $break = false; 

     foreach($split as $char) { 
      if($char == 0 && $break == false) { 
       $count--; 
      } 

      if($char != 0) { 
       $break = true; 
      } 
     } 

     $first = number_format(substr($number, 0, $pos), 0, '', '.'); 
     $last = substr($number, $pos + 1, $count); 
     $result = $first . ',' . $last; 

     $result = (! is_numeric(substr($result, -1))) ? substr($result, 0, -1) : $result; 

     return $result . "\n"; 
    } 
    return number_format($number, 0, '', '.') . "\n"; 
} 

echo magic_number_format('25'); 
echo magic_number_format('123.32'); 
echo magic_number_format('12312.3233'); 
echo magic_number_format('12.0100000'); 
echo magic_number_format('1231,00'); 
echo magic_number_format('1231,10'); 
echo magic_number_format('1,1'); 

上記のコードはコンマやドット記号の後に不要なゼロをスキップします。

+0

それぞれにどのような出力が得られますか? – C2486

答えて

3

あなたは車輪を改造しています。また、重複してリンクされた回答のコードは、唯一のアプローチでも最善のアプローチでも必要ではありません(あなたの質問に完全に関連する必要もありません)。通常のprintf()を通常の%sのフォーマットで使用すると、正常にスティックできます。テストケース:

$vals = [ 1, 1.000, 1.1, 1.230 ]; 
foreach ($vals as $val) { 
    printf("%s\n", $val); 
} 

は、望ましい生成します:あなたは変数にフォーマットされた値をASSINGする必要があり、あなたが行ってもいいです場合

1  
1                                      
1.1                                       
1.23 

sprintf()printf)を交換してください。

+1

はい、これまでのところ最高の答えです。 1ライナー。私の場合、私はprintfからsprintfに切り替えました。他にも文字列では動作しないので、私は自分の値に強制的に(浮動)する必要がありました。しかし、素晴らしい解決策!ありがとう! –