私は文字列string(5) "388.0"
を持っています。私はちょうどfloat number
をone zero
またはtwo zero
または10進数の後に来るものと正確に一致させたいと思う。どうすれば達成できますか?浮動小数点の後の文字列のゼロを得る
(float)$ valは、float(388)
をzero
なしで唯一指定します。
私は文字列string(5) "388.0"
を持っています。私はちょうどfloat number
をone zero
またはtwo zero
または10進数の後に来るものと正確に一致させたいと思う。どうすれば達成できますか?浮動小数点の後の文字列のゼロを得る
(float)$ valは、float(388)
をzero
なしで唯一指定します。
<?php
$cost = [
301.215,
359.2487,
389.21,
32.0
];
for ($i = 0; $i < count($cost); $i++) {
$precision = @count(str_split(explode(".", $cost[$i])[1]));
echo number_format($cost[$i], $precision)."\n";
}
//Output
301.215
359.2487
389.21
32.0
[Finished in 0.1s]
これは
はあなたがビルトインnumber_format機能を試してみましたが、与えられた精度の番号を返しますか?もちろん
<?php
$nb = '388.0';
var_dump(number_format((float)$nb, 0)); // string '388'
var_dump(number_format((float)$nb, 1)); // string '388.0'
var_dump(number_format((float)$nb, 2)); // string '388.00'
、あなたがfloatとしてあなたの文字列をキャストする場合は小数点以下の数字がすべて0
をしている場合、それはデフォルトで(float)388
になります。その周りに道があるとは思わないが、(float)388 === 388.0
が本当である。
http://php.net/manual/en/function.bcmul.php
var_dump(bcmul('388.0', '1', 2)); // string '388.0' (length=5)
var_dump(bcmul('388.00', '1', 2)); // string '388.00' (length=5)
var_dump(bcmul('388.0021', '1', 4)); // string '388.0021' (length=5)
あなたはfloat型にキャストする前に、小数点以下の桁数を格納する必要があります。おそらく、カスタムタイプ(たとえばクラス)が適切かもしれません。 – Yoshi