2012-08-07 42 views
10

Tôi đang cố gắng kiểm tra xem php có phải là chuỗi kép hay không.Kiểm tra xem chuỗi có phải là số tăng gấp đôi hay không

Đây là mã của tôi:

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

$ num là một vấn đề string..The là ngay cả khi có một int nó mang lại cho đúng. Có cách nào để kiểm tra nếu nó là một phao và không phải là một int !?

+0

Bạn có muốn thực thi print_half_star() cho các chuỗi như "4.0" không? –

Trả lời

13
// 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

Câu trả lời của bạn là một tốt hơn..Samuel –

+2

floatval ("24.0") // 24, Vì vậy, intval của bạn ($ floatVal)! = $ FloatVal sẽ là false – pszaba

+0

dường như không hoạt động các chuỗi như "75.00": http://sandbox.onlinephpfunctions.com/code/49bad34c2e9b4c417c0711af275014e10d135952 – wutzebaer

7

này sẽ bỏ qua các giá trị số nguyên biểu diễn dưới dạng chuỗi:

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

phương pháp tốt đẹp..havent nghĩ về nó –

4

Bạn có thể thử này:

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

Đẹp và ngắn..thanks –

1

Tại sao không sử dụng sự kỳ diệu của biểu thức chính quy

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

Regex đó sẽ không khớp với các định dạng số đặc biệt có chứa ký pháp khoa học http://php.net/manual/en/language.types.float.php – Samuel

+0

@Samuel cảm ơn điểm tốt. –

+1

$ p = '/^-? [0-9] + (\. [0-9] +)? $ /'; Điều này cho phép số âm và số nguyên là số kép. – hamboy75

0

nếu "định dạng chuỗi kép" như thế này "XXXXXX.XXXXXX"

thử kiểm tra

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

Tôi nghĩ rằng bạn đã có quá nhiều mã ở đó .. sự trở lại đầu tiên có thể đơn giản trở lại đúng –

0

Để có được tất cả các trường hợp của một phao chúng ta phải thêm lại bất kỳ của zero vào cuối có thể được cắt nhỏ ra bởi floatval() hoặc bởi typecasting (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 :; 

lưu ý !== không được sử dụng chỉ trong trường hợp $num_float không bao giờ được chuyển đổi trở lại thành một chuỗi bằng cách thêm zero. trường hợp này sẽ là trường hợp cho các giá trị không kết thúc bằng 0.

Các vấn đề liên quan