PHP - 检查正/负数字字符串

时间:2015-03-19 17:03:52

标签: php

我想知道检查数字字符串是正数还是负数的最佳方法是什么。

我正在使用此answer on S.O,但我无法确定带小数的数字是+还是 -

例如:

function check_numb($Degree){
  if ( (int)$Degree == $Degree && (int)$Degree > 0 ) {
    return 'Positive';
} else {
    return 'Negative';
  }
}

print check_numb("+2"); // returns Positive
print check_numb("+2.0"); // returns Positive
print check_numb("+2.1"); // returns Negative ??
print check_numb("+0.1"); // returns Negative ??
print check_numb("-0.1"); // returns Negative

似乎添加小数时会返回false。如何正确检查正数字符串> +0.XX和负数< -0.XX,其中包含2位小数..

谢谢!

2 个答案:

答案 0 :(得分:1)

考虑到给定的输入,为什么不:

$number = '+2,33122';
$isPositive = $number[0] === '+' ? 'Positive' : 'Negative';
// Positive

$number = '-0,2';
$isPositive = $number[0] === '+' ? 'Positive' : 'Negative';
// Negative

这是一个更通用的代码,即使从输入中删除了符号,也能正常工作:

function checkPositive ($number) {
   if (!is_numeric(substr($number, 0, 1))) {
       $sign = substr($number, 0, 1);
       return $sign == '+';
   }
   return $number > 0;
} 


$number = '+2,33122';
var_dump(checkPositive($number));
// true

$number = '-2,33122';
var_dump(checkPositive($number));
// false

$number = '2,22';
var_dump(checkPositive($number));
// true

答案 1 :(得分:0)

您的问题是因为:(int)"+2.1" == 22 != "+2.1"。对于所有数字,如果是< 0则为负数,如果为> 0则为正数。如果是== 0,那么显然0是无符号的。

function check_numb($Degree){
  if ( $Degree > 0 ) {
    return 'Positive';
} elseif( $Degree < 0 ) {
    return 'Negative';
  }
}