5

次のルールに従って、末尾のゼロを削除したいと思います。

  • 入力数値は常に小数点以下 4 桁です。
  • 出力数値は常に 2 から 4 の小数である必要があります
  • 小数点以下の最後の 2 桁がゼロの場合は、両方を削除します
  • 小数点以下の最後の桁がゼロの場合は、それを削除します

例:

  • 1.0000 -> 1.00
  • 1.4000 -> 1.40
  • 1.4100 -> 1.41
  • 1.4130 -> 1.413
  • 1.4136 -> 1.4136

私は次のことを検討しました:

if (substr($number, -2) == '00') return substr($number, 0, 4);
if (substr($number, -1) == '0') return substr($number, 0, 5);
return $number;

これを行うより良い方法はありますか?

4

3 に答える 3

0

そして今、まったく違う何かのために...

<?php
$crlf = "\n";
$input = array('1.4000', '1.4300', '1.2340', '1.4012', '1.0034', '1.2', '1.23456');
foreach ($input as $in) {
  for($n = 4; $n>2; $n--) {
    $f1 = (float)round($in, $n);
    $f2 = (float)round($in, $n-1);
    if ($f1 !== $f2) break;
  }
  echo "for in = ".$in." out is ".number_format($in, $n) . $crlf;
}
?>

出力:

for in = 1.4000 out is 1.40
for in = 1.4300 out is 1.43
for in = 1.2340 out is 1.234
for in = 1.4012 out is 1.4012
for in = 1.0034 out is 1.0034
for in = 1.2 out is 1.20
for in = 1.23456 out is 1.2346

これは、適切にフォーマットされた数値 (小数点以下が正確に 4 桁) に対しては期待どおりに動作しますが、数値が正しくフォーマットされていない場合でも動作することに注意してください。求められていたものとはまったく異なりますが、ミニマリストのソリューションよりも堅牢なソリューションの方が優れていることがよくあります...

于 2013-06-22T19:10:17.627 に答える