在JavaScript中将负数转换为正数


308

JavaScript中是否存在将数字转换为正值的数学函数?

Answers:


703

你可以用这个...

Math.abs(x)

Math​.abs()| MDN


1
您甚至可能要考虑〜x + 1。这是非常快的,但是不清楚它在做什么。放大以显示差异:jsperf.com/absolute-int
omgaz 2014年

22
@omgaz他们不一样... var x = -100; ~x+1 === 100但是var x = 100; ~x+1 === -100Math.abs总是使它成为一个积极的事物,而采用那些补语只会使符号反转。
jduncanator 2014年

您甚至可能要考虑-x。很快!
amara

93

x *= -1呢 我喜欢它的简单性。


17
尽管这很简单,但它假设该数字将始终为负。如果用例是这样,那么它就很棒。否则,我建议您谨慎。
myusuf

4
我不同意@myusuf。x将会翻转的任何数字。如果将x = 23和推入该等式,x则将等于-23。用埃斯卡兰特先生的话说:“正数乘以负数等于负数。负数乘以负数等于正数。” ...“我如何达到这些目标?!”
ExcellentSP

2
昨天是@Shane。如果为x=23,则它将变为-23。问题是,“在JS中将负数转换为正数”,但是以上内容将翻转任何数字,无论是正数还是负数。
myusuf

2
明白了 我对您的评论的解释是在翻转数字而不x总是保持积极态度的情况下进行的。我很抱歉@myusuf。
ExcellentSP

1
只是提醒您,此解决方案不适用于浮点数,它只获得小数部分
Oscar Luza

46

Math.abs(x)或者,如果您确定转换前的值是负数,只需在前面加上一个常规的减号:x = -x


29

减号(-)可以将正数转换为负数,将负数转换为正数。x=-y是视觉糖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 ... 

我发现此解决方案易于理解。


8

如果您想编写有趣的代码,其他任何人都无法更新,请尝试以下操作:

〜--x


1
但是,这不适用于浮点数...并且x的值也会更改。
2014年

我猜你是否不能改变x:〜
Kyle

1
凯尔(Kyle),~运算符确实将数字转换为32位整数。如果您将浮子作为输入,则它会被胶管。
亚历克西斯·威尔克

7

我知道这有点晚了,但是对于那些为此感到挣扎的人,可以使用以下功能:

  • 将任何数字转为正

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
  • 将任何数字变为负数

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
  • 倒数

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

6

负向正

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

正负

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

我看到了您想要显示的内容,但表达方式却令人困惑。也许您应该声明:表示正数:使用abs;表示负数:abs(x)* -1。这样,您并不暗示以前的X符号是什么。
Dionys


2

我自己做了类似的事情。

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

它检查数字是否为负,如果为负,则乘以-1。这确实会返回一个值,如果您捕获它,则由您决定。如果您想将其分配给某些内容,则可能应该执行以下操作:

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

但这实际上取决于您的目标是什么。对我而言,这很简单,如果否定则为正,否则不做任何事。因此,代码中的“”。在这种情况下,我使用了三级运算符,因为我很想这样做:

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

我在这里看到了按位解决方案,也想对此发表评论。

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

在我看来,这是非常不错的选择,我们可以这样重写它:

~(num = num-1);

简单来说,我们取负数,取负数,然后按位求反。如果我们对它进行按位反转,通常我们将得到的值1太小。您也可以这样做:

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

这将执行相同的操作,但先将其取反,然后再将1加到正数上。尽管您不能这样做:

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

这将不会导致优先级的原因,后缀运算符(如num++〜之前被评估,以及原因前缀)++num,即使它是在相同的优先级按位难道不工作NOT(〜),是因为它是从右向左计算。我确实尝试过交换它们,但与按位NOT相比,前缀似乎有点挑剔。+1之所以有效,是因为“ +”具有更高的优先级,并将在以后进行评估。

我发现该解决方案非常有趣,因此决定对其进行扩展,因为它刚刚被扔到了那里,而看到它的人可能会忽略它。虽然可以,但无法与浮点数一起使用。

我希望这篇文章并没有脱离最初的问题。:/


2

我的最小方法

用于将负数转换为正数,反之亦然

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


0

您可以使用运算符,该运算符将数字逻辑转换为负数并将1加到负数:

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


0

我知道另一种方法。此技术对正面和负面都具有负面影响

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

反之亦然:

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

实时代码:

// 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);


那不能回答问题。dave要求将值从负变为正,将正变为正的函数。
RaphaMex

他的问题是:“ JavaScript中是否存在将数字转换为正值的数学函数?” 他没有提到积极到积极。他只提到负面到正面。为什么要将正转换为正。该值将是相同的。
Tarryk Ttmm '18

您可以在问题下方的评论中要求澄清。无论如何,有一个公认的答案是正确的。您可以再次阅读它,然后看到有一个内置函数,可以将正数转换为正数。
RaphaMex


0

如果您希望数字始终为正,那么无论如何都可以执行此操作。

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

您也可以尝试此方法,但我不建议这样做:

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

问题是您可以将数字更改为负数,然后转换为字符串并删除-,然后转换回int。我想这将比使用其他功能需要更多的处理。

我已经在php中进行了测试,第一个功能更快,但是有时JS会做一些疯狂的事情,所以我不能肯定地说。


第二个示例输出输入数字的幂。n*-n应该是n*-1。但是,由于与第一个示例的简单性相比,类型转换和方法调用的效率非常低,因此我将完全删除该示例。甚至JS的古怪之处也无济于事
Gust van de Wal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.