Обнаружение отрицательных чисел

Мне было интересно, есть ли способ определить, является ли число отрицательным в PHP?

У меня есть следующий код:

$profitloss = $result->date_sold_price - $result->date_bought_price;

Мне нужно выяснить, является ли $profitloss отрицательным, и если это так, мне нужно повторить, что это так.


person BigJobbies    schedule 26.05.2011    source источник
comment
Не переживайте, у всех бывают плохие дни ;)   -  person Marty    schedule 26.05.2011
comment
Ох черт....такое простое решение..грр   -  person BigJobbies    schedule 26.05.2011
comment
это просто невезение ^^ Смотрите мой ответ ниже, просто для удовольствия, приятель :D   -  person    schedule 26.05.2011
comment
Это просто фантастика, потому что я буквально нахожусь на этой странице, потому что у меня был тот же вопрос, но, к счастью, я вспомнил, прежде чем увидел ответ. Это так просто, но это просто показывает, что мы много раз усложняем вещи.   -  person Chud37    schedule 19.03.2020


Ответы (9)


if ($profitloss < 0)
{
   echo "The profitloss is negative";
}

Редактировать: мне кажется, что это был слишком простой ответ для представителя, поэтому вот что-то, что вы также можете найти полезным.

В PHP мы можем найти абсолютное значение целого числа, используя функцию abs(). Например, если бы я пытался определить разницу между двумя фигурами, я мог бы сделать это:

$turnover = 10000;
$overheads = 12500;

$difference = abs($turnover-$overheads);

echo "The Difference is ".$difference;

Это даст The Difference is 2500.

person Dormouse    schedule 26.05.2011
comment
else { эхо Ура...; } - person Naveed; 26.05.2011
comment
Я понятия не имею, что вы имеете в виду, это потребовало серьезной работы. - person Dormouse; 26.05.2011
comment
Хороший ответ, мне тоже нравится ваше редактирование. Но какая разница с $difference = $turnover - $overheads;? - person Hannes Schneidermayer; 30.01.2014
comment
О ничего себе, я не ожидал, что буду комментировать это спустя почти три года. abs() вернет абсолютное значение любого целого числа, поэтому abs(-100) возвращает 100. $turnover-$overheads приведет к -2500, тогда как abs($turnover-$overheads) приведет к 2500. - person Dormouse; 30.01.2014

Я считаю, что это то, что вы искали:

class Expression {
    protected $expression;
    protected $result;

    public function __construct($expression) {
        $this->expression = $expression;
    }

    public function evaluate() {
        $this->result = eval("return ".$this->expression.";");
        return $this;
    }

    public function getResult() {
        return $this->result;
    }
}

class NegativeFinder {
    protected $expressionObj;

    public function __construct(Expression $expressionObj) {
        $this->expressionObj = $expressionObj;
    }

    public function isItNegative() {
        $result = $this->expressionObj->evaluate()->getResult();

        if($this->hasMinusSign($result)) {
            return true;
        } else {
            return false;
        }
    }

    protected function hasMinusSign($value) {
        return (substr(strval($value), 0, 1) == "-");
    }
}

Использование:

$soldPrice = 1;
$boughtPrice = 2;
$negativeFinderObj = new NegativeFinder(new Expression("$soldPrice - $boughtPrice"));

echo ($negativeFinderObj->isItNegative()) ? "It is negative!" : "It is not negative :(";

Однако обратите внимание, что eval — опасная функция, поэтому используйте ее только в том случае, если вам действительно нужно выяснить, является ли число отрицательным.

:-)

person Mahn    schedule 11.08.2012
comment
вы, сэр, ужасный, ужасный человек:)) - person Daniel; 09.03.2013
comment
Боже мой, это гениально. - person Mike P.; 17.09.2013
comment
Хотя я не проверял это, похоже, он обнаружит -0! - person CJ Dennis; 06.02.2016
comment
Это сделало мой день! Спасибо. - person Werner; 15.07.2016
comment
С этого момента я могу использовать этот ответ как свое определение чрезмерной инженерии. - person Sam; 27.09.2016
comment
@downvoters (5 на момент написания статьи), пожалуйста, объясните отрицательный голос! - person hanshenrik; 01.10.2017

Вы можете проверить, если $profitloss < 0

if ($profitloss < 0):
    echo "Less than 0\n";
endif;
person andrewmitchell    schedule 26.05.2011

Просто умножьте число на -1 и проверьте, положительный ли результат.

person Robson Vieira    schedule 22.10.2015
comment
Добавьте код к ответу, чем я дам вам +1. :) - person gvsrepins; 05.11.2015

Не поймите меня неправильно, но вы можете сделать так ;)

function nagitive_check($value){
if (isset($value)){
    if (substr(strval($value), 0, 1) == "-"){
    return 'It is negative<br>';
} else {
    return 'It is not negative!<br>';
}
    }
}

Вывод:

echo nagitive_check(-100);  // It is negative
echo nagitive_check(200);  // It is not negative!
echo nagitive_check(200-300);  // It is negative
echo nagitive_check(200-300+1000);  // It is not negative!
person Muhammad Sanaullah    schedule 30.09.2017

Вы можете использовать тернарный оператор, подобный этому, чтобы сделать его одним вкладышем.

echo ($profitloss < 0) ? 'false' : 'true';
person AkaiNoKen    schedule 23.01.2015
comment
@Shelton Я исправил ответ по вашему предложению и добавил краткое объяснение. - person Jaden Baptista; 09.10.2019

Я предполагаю, что основная идея состоит в том, чтобы найти, является ли число отрицательным, и отобразить его в правильном формате.

Тем, кто использует PHP5.3, может быть интересно использовать класс форматирования чисел — http://php.net/manual/en/class.numberformatter.php. Эта функция, как и ряд других полезных вещей, может отформатировать ваш номер.

$profitLoss = 25000 - 55000;

$a= new \NumberFormatter("en-UK", \NumberFormatter::CURRENCY); 
$a->formatCurrency($profitLoss, 'EUR');
// would display (€30,000.00)

Здесь также ссылка на то, почему квадратные скобки используются для отрицательных чисел: http://www.open.edu/openlearn/money-management/introduction-bookkeeping-and-accounting/content-section-1.7

person Vlad Vladimir Hercules    schedule 01.07.2015

Может быть легко достигнуто с помощью тернарного оператора.

$is_negative = $profitloss < 0 ? true : false;
person Usman Ahmed    schedule 13.11.2020
comment
выражение уже является логическим значением, поэтому троичное значение не требуется. точно так же, как $is_negative = $profitloss ‹ 0; - person Nat; 18.11.2020

Я написал вспомогательную функцию для своего проекта Laravel, но ее можно использовать где угодно.

function isNegative($value){
    if(isset($value)) {
        if ((int)$value > 0) {
            return false;
        }
        return (int)$value < 0 && substr(strval($value), 0, 1) === "-";
    }
}
person Nauman Bashir    schedule 02.07.2021