检查字符串是否为双精度

问题描述:

我想在php中检查字符串是否为双精度。检查字符串是否为双精度

这里是我的代码:

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

$ num是一个string..The问题是,即使有一个int它给真实的。有没有办法来检查它是否是一个浮点数,而不是一个整数!?

+0

您是否想对像“4.0”这样的字符串执行print_half_star()? – 2012-08-07 16:22:56

// 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 
} 
+0

你的答案是更好的一个..塞缪尔 – 2012-08-07 16:32:56

+2

floatval(“24.0”)// 24,所以你的intval($ floatVal)!= $ floatVal将是假的 – pszaba 2016-03-18 16:40:01

+0

似乎不工作字符串像“75.00”:http://sandbox.onlinephpfunctions.com/code/49bad34c2e9b4c417c0711af275014e10d135952 – wutzebaer 2017-09-11 10:16:15

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

if(is_numeric($num) && strpos($num, ".") !== false) 
{ 
    $this->print_half_star(); 
} 
+0

不错的方法..想过它 – 2012-08-07 16:11:00

你可以试试这个:

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) 
+0

好的和短..谢谢 – 2012-08-07 16:09:54

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

<?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)); 
+2

这个正则表达式不会匹配包含科学记数法的特殊数字格式http://php.net/manual/en/language.types.float.php – Samuel 2012-08-07 16:05:50

+0

@Samuel谢谢你的好处。 – 2012-08-07 16:28:27

+1

$ p ='/^- ?[0-9] +(\。[0-9] +)?$ /';这一个允许负数,整数作为双数。 – hamboy75 2017-03-16 14:07:10

如果“双字符串格式”像这样“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; 
} 
+0

我认为你的代码太多了。第一个返回可能会简单地返回true – 2012-08-07 16:12:36

为了让我们得上添加任何零的回可通过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 :; 

!==没有使用,以防万一$num_float从未加入零转换回一个字符串。对于不以0结尾的值,情况就是如此。