if ($ p & gt; 0 & amp; $ p & lt; = 1 не работает в десятичных числах

Я поставил этот код для расчета цены в функции getPrecio,

Для продуктов с ценами ниже 1 (например, 0,2 или 0,02) эта функция не работает.

Зачем?

Это его код:

function getPrecio($p)
{
if($p > 0 && $p <= 1) return $p*1.99;
}

это код PHP.
когда я говорю, что это не работает, это то, что это не исправляет рассчитанную цену.

попробуй это и не рассчитывай

    function getPrecio($p)
{
$floatPrice = floatval($p);
if($floatPrice  > 0 && $floatPrice  <= 1) return $floatPrice *1.99;
//if($p > 0 && $p <= 1) return $p*1.99;
elseif($p > 1 && $p <= 3) return $p*1.95;

обновленный код

    function getPrecio($p)
{
$floatPrice = floatval($p);
$floatCalculatedResult = 0;
if (between($floatPrice, 0, 1)) {
$floatCalculatedResult = $floatPrice * 1.99;
} else if (between($floatPrice, 1, 3)) {
$floatCalculatedResult = $floatPrice * 1.95;
}   else if (between($floatPrice, 3, 5)) {
$floatCalculatedResult = $floatPrice * 1.90;
}   else if (between($floatPrice, 5, 10)) {
$floatCalculatedResult = $floatPrice * 1.70;
}   else if (between($floatPrice, 10, 20)) {
$floatCalculatedResult = $floatPrice * 1.60;
}   else if (between($floatPrice, 20, 30)) {
$floatCalculatedResult = $floatPrice * 1.56;
}   else if (between($floatPrice, 30, 50)) {
$floatCalculatedResult = $floatPrice * 1.52;
}   else if (between($floatPrice, 50, 80)) {
$floatCalculatedResult = $floatPrice * 1.49;
}   else if (between($floatPrice, 80, 100)) {
$floatCalculatedResult = $floatPrice * 1.45;
}   else if (between($floatPrice, 100, 130)) {
$floatCalculatedResult = $floatPrice * 1.40;
}   else if (between($floatPrice, 130, 200)) {
$floatCalculatedResult = $floatPrice * 1.39;
}   else if (between($floatPrice, 200, 250)) {
$floatCalculatedResult = $floatPrice * 1.35;
}   else if (between($floatPrice,250, 500)) {
$floatCalculatedResult = $floatPrice * 1.32;
}   else if (between($floatPrice, 500, 700)) {
$floatCalculatedResult = $floatPrice * 1.28;
}   else if (between($floatPrice, 700, 900)) {
$floatCalculatedResult = $floatPrice * 1.26;
}   else if (between($floatPrice, 900, 1000)) {
$floatCalculatedResult = $floatPrice * 1.25;
}   else if (between($floatPrice, 1000, 10000)) {
$floatCalculatedResult = $floatPrice * 1.15;
}
return $floatCalculatedResult;
}

function between($var, $from, $to)
{
return ($var > $from && $var <= $to);
}

ОБНОВЛЕНО, ЕСЛИ ИЗМЕНИТЬ ПОЛЕ CSV от 0,02 до 0,02, КОД РАБОТАЕТ. Но нужен правильный код для работы с 0,02

-2

Решение

Может быть $p конвертируется в int, поэтому 0.2 или 0.02 будут равны 0. Попробуйте использовать floatval($p)

function getPrecio($p)
{
$floatPrice = floatval($p);
if($floatPrice  > 0 && $floatPrice  <= 1) return $floatPrice *1.99;
}

Обновленный ответ

Это должно работать как задумано.

function getPrecio($p)
{
$floatPrice = floatval($p);
$floatCalculatedResult = 0;
if (between($floatPrice, 0, 1)) {
$floatCalculatedResult = $floatPrice * 1.99;
} else if (between($floatPrice, 1, 3)) {
$floatCalculatedResult = $floatPrice * 1.95;
}
return $floatCalculatedResult;
}

function between($var, $from, $to)
{
return ($var > $from && $var <= $to);
}

Вы можете продолжить вводить диапазоны с between функция

1

Другие решения

Добавьте вверху:
$p = floatval(str_replace(',', '.', $p));

Это изменится 0,02 в 0.02,

0

По вопросам рекламы [email protected]