2017-01-20 13 views
0

私は文字列string(5) "388.0"を持っています。私はちょうどfloat numberone zeroまたはtwo zeroまたは10進数の後に来るものと正確に一致させたいと思う。どうすれば達成できますか?浮動小数点の後の文字列のゼロを得る

(float)$ valは、float(388)zeroなしで唯一指定します。

+1

あなたはfloat型にキャストする前に、小数点以下の桁数を格納する必要があります。おそらく、カスタムタイプ(たとえばクラス)が適切かもしれません。 – Yoshi

答えて

1
<?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] 

これは

+0

小数点以下5桁がある場合はどうなりますか? – vijayrana

+0

あなたのコメント –

+0

のように修正された答えをチェックしてください。問題のように、修正された回答形式は何ですか? – vijayrana

1

はあなたがビルトイン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が本当である。

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) 
関連する問題