16

我正在尝试检查 php 字符串是否为双精度字符串。

这是我的代码:

   if(floatval($num)){
         $this->print_half_star();
    }

$num 是一个字符串..问题是即使有一个 int 它也会给出 true。有没有办法检查它是否是浮点数而不是整数!?

4

8 回答 8

25
// Try to convert the string to a float
$floatVal = floatval($num);
// If the parsing succeeded and the value is not equivalent to an int
if($floatVal && intval($floatVal) != $floatVal)
{
    // $num is a float
}
于 2012-08-07T16:02:11.303 回答
12

这将省略表示为字符串的整数值:

if(is_numeric($num) && strpos($num, ".") !== false)
{
    $this->print_half_star();
}
于 2012-08-07T16:01:54.860 回答
7

你可以试试这个:

function isfloat($num) {
    return is_float($num) || is_numeric($num) && ((float) $num != (int) $num);
}

var_dump(isfloat(10));     // bool(false)
var_dump(isfloat(10.5));   // bool(true)
var_dump(isfloat("10"));   // bool(false)
var_dump(isfloat("10.5")); // bool(true)
于 2012-08-07T16:02:25.320 回答
1

您可以检查该值是否为数字,然后检查小数点,所以...

if(is_numeric($val) && stripos($val,'.') !== false)
{
    //definitely a float
}

但是它不能很好地处理科学记数法,因此您可能必须通过查找来手动处理它e

于 2018-11-28T19:27:44.293 回答
0

为什么不使用正则表达式的魔力

<?php
$p = '/^[0-9]*\.[0-9]+$/';
$v = '89.00';
var_dump(preg_match($p, $v));
$v = '.01';
var_dump(preg_match($p, $v));
$v = '0.01';
var_dump(preg_match($p, $v));
$v = '89';
var_dump(preg_match($p, $v));
于 2012-08-07T16:03:57.353 回答
0

如果“双字符串格式”像这样“XXXXXX.XXXXXX”

试试看

function check_double_string($str){
 $pairs = explode('.',$str);
 if ( is_array($pairs) && count($pairs)==2) {
   return ( is_numeric($pairs[0]) && is_numeric($pairs[1])? true : false; 
 }
 return false;
}
于 2012-08-07T16:05:53.680 回答
0

为了得到浮点数的所有情况,我们必须在末尾添加任何零,这可能会被floatval()或通过类型转换截断(float)$num

$num='17.000010';
$num_float = (float)$num; //$num_float is now 17.00001  
//add the zero's back to $num_float
while (strlen ($num) > strlen ($num_float))  $num_float = $num_float . '0';   //$spot_float in now a string again


if($num_float != $num) then $num was no double :;

没有使用note!==以防万一$num_float从未通过添加零将其转换回字符串。不以 0 结尾的值就是这种情况。

于 2016-04-20T21:34:12.817 回答
0

这是我最终为现代 PHP 创建的内容:

/**
 * Determines if a variable appears to be a float or not.
 *
 * @param string|int|double $number
 * @return bool True if it appears to be an integer value. "75.0000" returns false.
 * @throws InvalidArgumentException if $number is not a valid number.
 */
function isFloatLike($number): bool
{
    // Bail if it isn't even a number.
    if (!is_numeric($number)) {
        throw new InvalidArgumentException("'$number' is not a valid number.");
    }

    // Try to convert the variable to a float.
    $floatVal = floatval($number);

    // If the parsing succeeded and the value is not equivalent to an int, 
    return ($floatVal && intval($floatVal) != $floatVal);
}
于 2019-04-10T04:34:57.253 回答