web-dev-qa-db-fra.com

Changer le signe d'un nombre en PHP?

J'ai quelques flotteurs:

-4.50
+6.25
-8.00
-1.75

Comment puis-je changer tout cela en flottants négatifs pour qu'ils deviennent:

-4.50
-6.25
-8.00
-1.75

J'ai aussi besoin d'un moyen de faire l'inverse

Si le flotteur est négatif, faites-en un positif.

55
dotty

Un trivial

$num = $num <= 0 ? $num : -$num ;

ou, la meilleure solution, à mon humble avis:

$num = -1 * abs($num)

Comme l'a signalé @VegardLarsen,

la multiplication explicite peut être évitée pour la brièveté mais je préfère la lisibilité à la brièveté

Je suggère d'éviter if/else (ou un opérateur ternaire équivalent), surtout si vous devez manipuler un certain nombre d'éléments (en boucle ou en utilisant un fonction lambda), car cela affectera les performances.

"Si le flotteur est négatif, faites-en un positif."

Pour changer le signe d'un nombre, vous pouvez simplement faire:

$num = 0 - $num;

ou, multipliez-le par -1, bien sûr :)

149
drAlberT
$float = -abs($float);
45
Vegard Larsen

Que diriez-vous de quelque chose de trivial comme:

  • inverser:

    $num = -$num;
    
  • convertir uniquement le positif en négatif:

    if ($num > 0) $num = -$num;
    
  • convertir uniquement le négatif en positif:

    if ($num < 0) $num = -$num;
    
29
Gumbo

concernant l'édition: "J'ai aussi besoin d'un moyen de faire l'inverse Si le flotteur est négatif, faites-en un positif"

$number = -$number;

change le nombre en son contraire.

12
SilentGhost

Je pense que la réponse de Gumbo est très bien. Certaines personnes préfèrent cette expression fantaisiste qui fait la même chose:

$int = (($int > 0) ? -$int : $int);

EDIT : Apparemment, vous recherchez une fonction qui rendra également les négatifs positifs. Je pense que ces réponses sont les plus simples:

/* I am not proposing you actually use functions called
   "makeNegative" and "makePositive"; I am just presenting
   the most direct solution in the form of two clearly named
   functions. */
function makeNegative($num) { return -abs($num); }
function makePositive($num) { return abs($num); }
3
Dan Tao
function positive_number($number)
{
    if ($number < 0) {
        $number *= -1;
    }

   return $number;
}
2
Wallace Maxters
function invertSign($value)
{
    return -$value;
}
0
Frederik Krautwald