用JavaScript将负数转换为正数

JavaScript中是否有数学函数可以将数字转换为正数?

575644 次浏览
unsigned_value = Math.abs(signed_value);

你可以用这个…

Math.abs(x)

Math​.abs() | MDN

Math.abs(x)或如果你是某些,则转换前值为负,只需在前面加上一个常规减号:x = -x

负号(-)可以将正数转换为负数,也可以将负数转换为正数。x=-yx=(y*-1)的视觉糖。

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

x *= -1呢?我喜欢它的简洁。

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

我觉得这个解决办法很容易理解。

如果你想写有趣的代码,没有人可以更新,试试这个:

~——x

我自己也做过类似的事。

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,然后逐位求倒数。如果按位反转,通常会得到一个很小的值1。 你也可以这样做:

~num+1; //Wont change the actual num value, merely returns the new value
这将做同样的事情,但将首先反转,然后将正数加1。 虽然你不能这样做:

~num++; //Wont display the right value.
这将不起作用,因为优先级,诸如num++这样的后缀操作符将在~之前计算,而前缀++num不能起作用的原因是,即使它与按位not(~)具有相同的优先级,因为它是从右向左计算的。我确实试图交换他们周围,但似乎前缀是一个小挑剔相比,按位不。 +1可以工作,因为'+'有更高的优先级,将在后面计算

我发现这个解决方案相当有趣,并决定扩展它,因为它只是被扔在那里,人们看到它可能会忽略它。虽然是的,它不会与浮动工作。

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

我知道这有点晚了,但对于那些纠结于此的人,你可以使用以下函数:

  • < p > 将任何数字变为正数

    let x =  54;
    let y = -54;
    let resultx =  Math.abs(x); //  54
    let resulty =  Math.abs(y); //  54
    
  • Turn any number negative

    let x =  54;
    let y = -54;
    let resultx = -Math.abs(x); // -54
    let resulty = -Math.abs(y); // -54
    
  • Invert any number

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

你可以使用运算符,逻辑上将数字转换为负数,并在负数上加1:

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

我的最小方法

用于将负数转换为正数&亦然

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

我知道另一种方法。这种方法从负到正都有效。反之亦然

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

乘以(-1)是将负数转换为正数的最快方法。但是你要小心,不要把我的错误的正数转换成负数!所以需要额外的检查…

那么数学。abs、数学。floor和parseInt是最慢的。

enter image description here

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

由负转正

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

正转负

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

对于函数式编程,Ramda有一个很好的方法。同样的方法也适用于从正到负,反之亦然。

https://ramdajs.com/docs/#negate

如果你想让这个数一直是正数你可以这样做。

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会做一些疯狂的事情,所以我不能肯定。