web-dev-qa-db-fra.com

Faire un nombre négatif positif

J'ai une méthode Java dans laquelle je fais la somme d'un ensemble de nombres. Cependant, je veux que tous les nombres négatifs soient traités comme des positifs. Donc (1) + (2) + (1) + (- 1) devrait être égal à 5.

Je suis sûr qu'il y a un moyen très facile de faire cela - je ne sais pas comment.

135
Tray

Il suffit d'appeler Math.abs . Par exemple:

int x = Math.abs(-5);

Ce qui mettra x à 5.

341
Jon Skeet

Le concept que vous décrivez s'appelle "valeur absolue" et Java a une fonction appelée Math.abs pour le faire à votre place. Ou vous pouvez éviter l'appel de fonction et le faire vous-même:

number = (number < 0 ? -number : number);

ou

if (number < 0)
    number = -number;
101
Paul Tomblin

Vous recherchez une valeur absolue, mec. Math.abs(-5) renvoie 5 ...

19
Hexagon Theory

Utilisez la fonction abs:

int sum=0;
for(Integer i : container)
  sum+=Math.abs(i);
12
jpalecek

Ce code est non sûr d'être appelé sur des nombres positifs.

int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
8
AZ_

Vous parlez de valeurs absolues?

Math.abs (...) est la fonction que vous voulez probablement.

6
Uri

Vous souhaitez insérer chaque numéro dans Math.abs(). par exemple.

System.out.println(Math.abs(-1));

affiche "1".

Si vous voulez éviter d'écrire la partie Math.-, vous pouvez inclure Math util de manière statique. Ecrivez

import static Java.lang.Math.abs;

avec vos importations, et vous pouvez vous référer à la fonction abs()- simplement en écrivant

System.out.println(abs(-1));
6
Henrik Paul

Essayez ceci (le négatif devant le x est valide puisqu'il s'agit d'un opérateur unaire, trouvez-en plus ici ):

int answer = -x;

Avec cela, vous pouvez transformer un positif en négatif et un négatif en positif.


Cependant , si vous voulez seulement rendre un nombre négatif positif, essayez ceci:

int answer = Math.abs(x);

OU, si vous préférez ne pas utiliser la méthode abs () pour une raison quelconque, essayez ceci:

int answer = Math.sqrt(Math.pow(x, 2));

J'espère que ça aide! Bonne chance!

6

Lorsque vous devez représenter une valeur sans le concept de perte ou d'absence (valeur négative), on parle de "valeur absolue".


La logique pour obtenir la valeur absolue est très simple: "If it's positive, maintain it. If it's negative, negate it".


Cela signifie que votre logique et votre code devraient fonctionner comme suit:

//If value is negative...
if ( value < 0 ) {
  //...negate it (make it a negative negative-value, thus a positive value).
  value = negate(value);
}

Il y a 2 façons de nier une valeur:

  1. Par, bien, en annulant sa valeur: value = (-value);
  2. En le multipliant par "100% négatif" ou "-1": value = value * (-1);

Les deux sont en réalité les deux faces d'une même pièce. C'est juste que vous ne vous souvenez généralement pas que value = (-value); est en fait value = 1 * (-value);.


Eh bien, pour ce qui est de la façon dont vous le faites réellement en Java, c'est très simple, car Java fournit déjà une fonction pour cela, dans le Math class: value = Math.abs(value);

Oui, le faire sans Math.abs() n'est qu'une ligne de code avec des calculs très simples, mais pourquoi donner à votre code une apparence laide? Il suffit d'utiliser la fonction Math.abs() fournie par Java! Ils le fournissent pour une raison!

Si vous devez absolument ignorer la fonction, vous pouvez utiliser value = (value < 0) ? (-value) : value;, qui est simplement une version plus compacte du code que j'ai mentionné dans la section logique (3ème), à ​​l'aide de l'opérateur Ternary (? :) .


En outre, il peut arriver que vous souhaitiez toujours représenter une perte ou une absence dans une fonction pouvant recevoir à la fois des valeurs positives et négatives.

Au lieu de faire une vérification compliquée, vous pouvez simplement obtenir la valeur absolue et l’annuler: negativeValue = (-Math.abs(value));


Dans cet esprit, et si l’on considère un cas avec une somme de plusieurs nombres comme le vôtre, ce serait une bonne idée de mettre en oeuvre une fonction:

int getSumOfAllAbsolutes(int[] values){
  int total = 0;
  for(int i=0; i<values.lenght; i++){
    total += Math.abs(values[i]);
  }
  return total;
}

En fonction de la probabilité que vous ayez à nouveau besoin de code associé, il peut également être judicieux de les ajouter à votre propre bibliothèque "utils", en séparant ces fonctions en leurs composants principaux et en maintenant la fonction finale simplement comme un nid d'appels à fonctions maintenant divisées des composants de base:

int[] makeAllAbsolute(int[] values){
  //@TIP: You can also make a reference-based version of this function, so that allocating 'absolutes[]' is not needed, thus optimizing.
  int[] absolutes = values.clone();
  for(int i=0; i<values.lenght; i++){
    absolutes[i] = Math.abs(values[i]);
  }
  return absolutes;
}

int getSumOfAllValues(int[] values){
  int total = 0;
  for(int i=0; i<values.lenght; i++){
    total += values[i];
  }
return total;
}

int getSumOfAllAbsolutes(int[] values){
  return getSumOfAllValues(makeAllAbsolute(values));
}
5
XenoRo

Le moyen le plus simple de procéder consiste à envelopper chaque nombre dans un appel Math.abs () de manière à ajouter:

Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)

avec des changements de logique pour refléter la structure de votre code. Verbose, peut-être, mais il fait ce que vous voulez.

5
Eddie

Pourquoi ne pas multiply that number with -1?

Comme ça:

_//Given x as the number, if x is less than 0, return 0 - x, otherwise return x:
return (x <= 0.0F) ? 0.0F - x : x;
_
3
Muhammad Imran Tariq

Je recommanderais les solutions suivantes:

sans lib fun:

    value = (value*value)/value

avec lib fun:

   value = Math.abs(value);
3
saidesh kilaru
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());

Alternativement:

int i = -123;
System.out.println(Math.abs(i));
1
Ramkumar

La fonction de bibliothèque Math.abs() peut être utilisée.
Math.abs() renvoie la valeur absolue de l'argument

  • si l'argument est négatif, il retourne la négation de l'argument.
  • si l'argument est positif, il retourne le nombre tel quel.

par exemple:

  1. int x=-5;
    System.out.println(Math.abs(x));

Sortie: 5

  1. int y=6;
    System.out.println(Math.abs(y));

Sortie: 6

1

Si vous vous intéressez aux mécanismes du complément à deux, voici comment procéder de manière peu efficace, mais illustrative:

private static int makeAbsolute(int number){
     if(number >=0){
        return number;
     } else{
        return (~number)+1;
     }
}
1
Miquel

J'avais besoin de la valeur absolue d'un long, et j'ai examiné profondément Math.abs et découvert que si mon argument est inférieur à LONG.MIN_VAL, qui est -9223372036854775808l, la fonction abs ne renverra pas une valeur absolue mais uniquement la valeur minimale. Dans ce cas, si votre code utilise cette valeur abs plus loin, il pourrait y avoir un problème.

0
Santhosh