Converter um número negativo em positivo em JavaScript


308

Existe uma função matemática no JavaScript que converte números em valor positivo?

Respostas:


704

Você poderia usar isso ...

Math.abs(x)

Math​.abs()| MDN


1
Você pode até considerar ~ x + 1. É bem rápido, mas não está claro o que está fazendo. Clique aqui para mostrar a diferença: jsperf.com/absolute-int
omgaz

22
@omgaz Eles não são os mesmos ... var x = -100; ~x+1 === 100mas var x = 100; ~x+1 === -100. Math.abssempre o torna positivo, enquanto o complemento simplesmente inverte o sinal.
Jduncanator

Você pode até considerar -x. É bem rápido!
amara

93

Que tal x *= -1? Eu gosto da sua simplicidade.


17
Embora isso seja simples, assume-se que o número sempre será negativo. Se o caso de uso for esse, é incrível. Caso contrário, aconselho cautela.
11135 myusuf

4
Eu discordo @myusuf. Qualquer número que seja xserá invertido. Se x = 23e for inserido nessa equação, xserá igual -23. Nas palavras do Sr. Escalante, "Um positivo vezes que um negativo é igual a um negativo. Um negativo vezes que um negativo é igual a um positivo". ... "Como eu alcanço esses kiiiiiiids ?!"
ExcellentSP

2
Exatamente @ Shane ontem. Se x=23, então se tornará -23. Conforme a pergunta, 'Converta um número negativo para um número positivo em JS', mas o acima irá inverter qualquer número, seja ele positivo ou negativo.
myusuf 14/08/2015

2
Entendido. Minha interpretação do seu comentário foi no contexto de inverter o número e nem xsempre ser positiva. Minhas desculpas @myusuf.
ExcellentSP

1
apenas lembrar que esta solução não se aplica para os números float, só fica a parte decimal
Oscar Luza

46

Math.abs(x)ou se você está certo o valor é negativo antes da conversão apenas prefixar um sinal de menos regulares: x = -x.


29

O sinal de menos (-) pode converter números positivos em números negativos e números negativos em números positivos. x=-yé açúcar visual para x=(y*-1).

var y = -100;
var x =- y;


12
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

Acho esta solução fácil de entender.


8

Se você gostaria de escrever um código interessante que ninguém mais possa atualizar, tente o seguinte:

~ --x


1
Isso não funciona com pontos flutuantes ... e o valor de x também muda.
Alexis Wilke

Eu acho que se você não pode mudar x: ~ --x; ++ x
Kyle

1
Kyle, o ~operador converte o número em um número inteiro de 32 bits. Se você tiver um flutuador como entrada, ele será mangueira.
Alexis Wilke

7

Eu sei que isso é um pouco tarde, mas para as pessoas que lutam com isso, você pode usar as seguintes funções:

  • Torne qualquer número positivo

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • Torne qualquer número negativo

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • Inverter qualquer número

    let x =  54;
    let y = -54;
    let resultx = -(x);         // -54
    let resulty = -(y);         //  54

6

Negativo para positivo

var X = -10 ;
var number = Math.abs(X);     //result 10

Positivo para negativo

var X = 10 ;
var number = (X)*(-1);       //result -10

Eu vejo o que você quer mostrar, mas o jeito que você coloca é confuso. Talvez você deva declarar: positivo: use abs; negativo: abs (x) * -1. Dessa forma, você não implica qual é o ex-sinal X.
Dionys 17/04

5

Multiplicar por (-1) é a maneira mais rápida de converter números negativos em positivos. Mas você deve ter cuidado para não converter meu erro em um número positivo em negativo! Portanto, é necessária uma verificação adicional ...

Então Math.abs, Math.floor e parseInt são os mais lentos.

insira a descrição da imagem aqui

https://jsperf.com/test-parseint-and-math-floor-and-mathabs/1


1
Alguns de nós esquecemos o quão útil a matemática básica pode ser nesses casos. Obrigado por me lembrar de tanta simplicidade.
Alexander Dixon

2

Eu fiz algo assim sozinho.

num<0?num*=-1:'';

Ele verifica se o número é negativo e, se for, multiplique por -1. Isso retorna um valor, depende de você se você o capturar. Caso você queira atribuí-lo a algo, você provavelmente deve fazer algo como:

var out = num<0?num*=-1:num; //I think someone already mentioned this variant.

Mas isso realmente depende do seu objetivo. Para mim, era simples, faça positivo se negativo, caso contrário não faça nada. Daí o '' no código. Neste caso, usei o operador terciário, porque eu queria, poderia muito bem ser:

if(num<0)num*=-1;

Eu vi a solução bit a bit aqui e queria comentar sobre essa também.

~--num; //Drawback for this is that num original value will be reduced by 1

Este soultion é muito chique na minha opinião, poderíamos reescrevê-lo assim:

~(num = num-1);

Em termos simples, pegamos o número negativo, tiramos um número e depois o invertemos bit a bit. Se o tivéssemos invertido normalmente, teríamos um valor 1 muito pequeno. Você também pode fazer isso:

~num+1; //Wont change the actual num value, merely returns the new value

Isso fará o mesmo, mas inverterá primeiro e depois adicionará 1 ao número positivo. Embora você não possa fazer isso:

~num++; //Wont display the right value.

Isso não funcionará por causa da precedência , operadores de postfix como num++seriam avaliados antes de ~ e o prefixo do motivo ++numnão funcionaria, mesmo que esteja na mesma precedência que NOT (~) bit a bit, porque é avaliado da direita para a esquerda. Eu tentei trocá-los, mas parece que o prefixo é um pouco exigente em comparação com o NOT bit a bit. O +1 funcionará porque '+' tem uma precedência mais alta e será avaliado posteriormente.

Achei a solução bastante divertida e decidi expandi-la, pois era lançada lá e postar pessoas que a observavam provavelmente a estavam ignorando. Embora sim, ele não funciona com carros alegóricos.

Minha esperança é que este post não se afaste da pergunta original. : /


2

Minha abordagem mínima

Para converter número negativo em positivo e vice-versa

var num = -24;
num -= num*2;
console.log(num)
// result = 24


0

Você pode usar o operador ~ que converte logicamente o número em negativo e adiciona 1 ao negativo:

var x = 3;
x = (~x + 1);
console.log(x)
// result = -3


0

Eu conheço outra maneira de fazer isso. Esta técnica funciona de negativo para positivo e vice-versa

var x = -24;
var result = x * -1;

Vice-versa:

var x = 58;
var result = x * -1;

CÓDIGO AO VIVO:

// NEGATIVE TO POSITIVE: ******************************************
var x = -24;
var result = x * -1;
console.log(result);

// VICE VERSA: ****************************************************
var x = 58;
var result = x * -1;
console.log(result);

// FLOATING POINTS: ***********************************************
var x = 42.8;
var result = x * -1;
console.log(result);

// FLOATING POINTS VICE VERSA: ************************************
var x = -76.8;
var result = x * -1;
console.log(result);


Isso não responde à pergunta. dave solicita uma função que altera o valor negativo para positivo e positivo para positivo .
RaphaMex

Sua pergunta diz: "Existe uma função matemática no JavaScript que converte números em valor positivo?" Ele não menciona positivo para positivo. Ele apenas menciona negativo para positivo. Por que você deseja converter positivo em positivo? O valor seria o mesmo.
Tarryk Ttmm

Você pode pedir esclarecimentos em um comentário abaixo da pergunta. De qualquer forma, há uma resposta aceita que é a correta. Você pode lê-lo novamente e ver que há uma função interna que ... converte positivo em positivo.
RaphaMex 01/02


0

Se você deseja que o número seja sempre positivo, não importa o que você possa fazer.

function toPositive(n){
    if(n < 0){
        n = n * -1;
    }
    return n;
}
var a = toPositive(2);  // 2
var b = toPositive(-2); // 2

Você também pode tentar isso, mas eu não recomendo:

function makePositive(n){
    return Number((n*-n).toString().replace('-','')); 
}
var a = makePositive(2);  // 2
var b = makePositive(-2); // 2

O problema disso é que você pode alterar o número para negativo, converter para string e remover o - da string e, em seguida, converter novamente para int. O que eu acho que levaria mais processamento do que apenas usar a outra função.

Eu testei isso em php e a primeira função é mais rápida, mas às vezes JS faz algumas coisas loucas, então não posso dizer com certeza.


O segundo exemplo gera a potência do número de entrada. n*-ndeveria ser n*-1. Eu removeria o exemplo por completo, já que as conversões de tipo e chamada de método são muito ineficientes em comparação com a simplicidade do primeiro exemplo. Até a peculiaridade de JS não pode ajudar aqui
Gust van de Wal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.