2017-01-20 276 views
0

我有一个字符串string(5) "388.0"。我只是想要得到float numberone zerotwo zero或任何数字在十进制之后。我怎样才能实现它?将小数点后的小数点后的字符串转换为浮点数

简单地(float)$ val只给我float(388)没有zero

+1

你需要存储铸造浮动前的小数位数。也许自定义类型(例如类)可能是合适的。 – 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)388如果小数点后的数字都是0。我不认为有这个方法,但(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) 
相关问题