我想知道检查数字字符串是正数还是负数的最佳方法是什么。
我正在使用此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位小数..
谢谢!
答案 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" == 2
和2 != "+2.1"
。对于所有数字,如果是< 0
则为负数,如果为> 0
则为正数。如果是== 0
,那么显然0
是无符号的。
function check_numb($Degree){
if ( $Degree > 0 ) {
return 'Positive';
} elseif( $Degree < 0 ) {
return 'Negative';
}
}