JavaScript中有一个数学函数可以将数字转换为正值?

#1 楼

您可以使用此...

Math.abs(x)


Math​.abs() | MDN

评论


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

–omgaz
2014-10-15 23:25

@omgaz它们不一样... var x = -100; 〜x + 1 === 100但var x = 100; 〜x + 1 === -100。 Math.abs始终使它成为肯定,而取那些补码只会使符号反转。

– jduncanator
2014年12月18日在12:53

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

–amara
18年5月5日在1:19

#2 楼

x *= -1怎么样?我喜欢它的简单性。

评论


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

– myusuf
15年7月11日在18:58

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

–ExcellentSP
15年8月13日在14:41

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

– myusuf
15年8月14日在17:03

明白了我对您的评论的解释是在翻转数字而不使x始终为正的情况下进行的。我很抱歉@myusuf。

–ExcellentSP
2015年8月16日19:14



请注意,此解决方案不适用于浮点数,它只获取小数部分

–奥斯卡·卢扎(Oscar Luza)
19年1月2日,下午5:44

#3 楼

Math.abs(x),或者如果您确定转换前该值为负,则只需在常规负号前面加上:x = -x

#4 楼

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

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


#5 楼

unsigned_value = Math.abs(signed_value);


#6 楼

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


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

#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




#8 楼

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

〜--x

评论


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

– Alexis Wilke
2014年5月24日,3:07



我猜你是否不能改变x:〜--x; ++ x

–凯尔
2014年10月15日在21:52

凯尔(Kyle),〜运算符会将数字转换为32位整数。如果您将浮子作为输入,则它会被胶管。

– Alexis Wilke
14-10-16在11:38

#9 楼

负到正

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
20-4-17的0:19

#10 楼

乘以(-1)是将负数转换为正数的最快方法。但是您必须注意不要将我的错误从正数转换为负数!因此需要额外检查...

然后Math.abs,Math.floor和parseInt才是最慢的。 /jsperf.com/test-parseint-and-math-floor-and-mathabs/1

评论


我们中的有些人忘记了在这种情况下基本数学的实用性。感谢您提醒我如此简单。

–亚历山大·迪克森(Alexander Dixon)
19年7月10日在19:43

#11 楼

我自己做了类似的事情。

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可以工作,因为'+'的优先级更高,稍后会进行评估。

我发现该解决方案非常有趣,因此决定将其扩展到那里,因为当时它只是扔在那儿,所以看到它的人可能会忽略它。尽管可以,但它不适用于浮点数。

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

#12 楼

我的最小方法

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



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




#13 楼

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




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




#14 楼

我知道另一种方法。此技术对正面和反面都有效,反之亦然

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


副词Versa:

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
18年1月30日,0:47

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

–塔里克(Tarryk)Ttmm
18年1月31日在23:52



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

– RaphaMex
18年2月1日,0:12

#15 楼

对于函数式编程,Ramda为此提供了一种不错的方法。相同的方法适用于从正到负,反之亦然。

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

#16 楼

如果您希望该数字始终为正,无论您可以执行什么操作。

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的古怪之处也可能无济于事

–古斯特·范·德·沃尔
20-4-17的0:17