无法在php中将字符串转换为float

时间:2017-06-19 15:58:58

标签: php

我正在尝试将带有数字的String转换为float。 我尝试了以下方法:

write_file($log . "temp=" . $temp . ".<br/>" , "public/files/log.txt" );
write_file($log . "temp type=" . gettype($temp) . "<br/>" , "public/files/log.txt" );
$flyt  = floatval("2.19");
write_file($log . "2.19 float =" . $flyt . ".<br/>" , "public/files/log.txt" );
$flyt  = floatval($temp);
write_file($log . "temp float =" . $flyt . ".<br/>" , "public/files/log.txt" );

这给了我以下结果:

temp float =0.
2.19 float =2.19.
temp type=string
temp=2.19.

当$ temp为“2.19”时,为什么我不能让它浮动? 我尝试了几种方法,都没有用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

浏览此文档: String Convertions

这应该这样做:

$flyt = (float) "2.19";

对于 floatval

$string = '2.19';
$flyt  = floatval($string);
echo $flyt;

也可以查看FloatVal Examples

答案 1 :(得分:0)

您可以使用类型转换。

$StringVal = "10.12";   // $StringVal is String
$FloatVal = (float) $StringVal;   // $FloatVal is Float

您可以使用此函数将字符串变量转换为float。

此函数使用最后一个逗号或点(如果有)创建一个干净的浮点数,忽略千位分隔符,货币或任何其他字母:

function tofloat($num) {
    $dotPos = strrpos($num, '.');
    $commaPos = strrpos($num, ',');
    $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos : 
        ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false);

    if (!$sep) {
        return floatval(preg_replace("/[^0-9]/", "", $num));
    } 

    return floatval(
        preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . '.' .
        preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num)))
    );
}

参考:http://php.net/manual/en/function.floatval.php

使用 floatval()时的PTR:

来自documentation

如果字符串中不包含任何字符&#39;。&#39;,&#39; e&#39;或&#39; E&#39;并且数值适合整数类型限制(由PHP_INT_MAX定义),该字符串将被计算为整数。在所有其他情况下,它将被评估为浮动。