繁体   English   中英

在 JavaScript 中将负数转换为正数

[英]Convert a negative number to a positive one in JavaScript

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

你可以用这个...

Math.abs(x)

Math​.abs() | MDN

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

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

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

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

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

  • 将任何数字变为正数

    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
unsigned_value = Math.abs(signed_value);
var posNum = (num < 0) ? num * -1 : num; // if num is negative multiple by negative one ... 

我发现这个解决方案很容易理解。

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

~--x

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

然后 Math.abs、Math.floor 和 parseInt 是最慢的。

在此处输入图片说明

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

我自己做了这样的事情。

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++后缀运算符将在 ~ 之前进行评估,并且即使它与按位 NOT(~) 具有相同的优先级,原因前缀++num不起作用,因为它是从右到离开了。 我确实尝试过交换它们,但与按位非相比,前缀似乎有点挑剔。 +1 将起作用,因为 '+' 具有更高的优先级,将在稍后进行评估。

我发现这个解决方案很有趣,并决定扩展它,因为它只是被扔在那里并且发布的人可能会忽略它。 虽然是的,但它不适用于花车。

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

我的最小方法

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

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

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

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

如果您希望数字始终为正数,无论您可以这样做。

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

我知道另一种方法。 这种技术对积极的消极和反之亦然

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM