#1 楼
您可以使用此...Math.abs(x)
Math.abs()
| MDN #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=-y
是x=(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
评论
您甚至可能要考虑〜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