把一个负数变成正数

我有一个 Java 方法,在这个方法中我要求和一组数字。但是,我希望所有的负数都被看作正数。所以(1) + (2) + (1) + (- 1)应该等于5。

我相信有一个非常简单的方法-我只是不知道怎么做。

394311 次浏览

只要拨打 Math.abs。例如:

int x = Math.abs(-5);

x设置为 5

请注意,如果传递 Integer.MIN_VALUE,将返回相同的值(仍为负值) ,因为 int的范围不允许表示等效的正值。

你是在问绝对值吗?

Math.abs (...)是您可能需要的函数。

您所描述的概念称为“绝对值”,而 Java 有一个名为 Math.abs的函数可以为您完成这项工作。或者您可以避免函数调用,自己来完成:

number = (number < 0 ? -number : number);

或者

if (number < 0)
number = -number;

使用 abs函数:

int sum=0;
for(Integer i : container)
sum+=Math.abs(i);

最简单的方法是将每个数字包装在 Math.abs ()调用中,这样您就可以添加:

Math.abs(1) + Math.abs(2) + Math.abs(1) + Math.abs(-1)

通过逻辑更改来反映代码的结构。也许冗长,但是它可以做你想做的事情。

你在寻找绝对值,伙计 Math.abs(-5)返回5..。

你要把每个数字包装成 Math.abs()

System.out.println(Math.abs(-1));

打印出“1”。

如果你想避免写 Math.-部分,你可以包括数学直到静态。只要写

import static java.lang.Math.abs;

随着你的导入,你可以参考 abs()-函数只需写

System.out.println(abs(-1));

我需要一个 long 的绝对值,然后深入研究 Math.abs,发现如果我的参数小于 LONG.MIN _ VAL,即 -9223372036854775808l,那么 abs 函数将不会返回一个绝对值,而只返回最小值。在这种情况下,如果您的代码进一步使用这个 abs 值,那么可能会出现问题。

这个代码是 没有安全的,可以在正数上调用。

int x = -20
int y = x + (2*(-1*x));
// Therefore y = -20 + (40) = 20
String s = "-1139627840";
BigInteger bg1 = new BigInteger(s);
System.out.println(bg1.abs());

或者:

int i = -123;
System.out.println(Math.abs(i));

如果你对两个人互补的机制感兴趣,这里有一个绝对低效但是说明性的低层次方法:

private static int makeAbsolute(int number){
if(number >=0){
return number;
} else{
return (~number)+1;
}
}

你为什么不 multiply that number with -1

像这样:

//Given x as the number, if x is less than 0, return 0 - x, otherwise return x:
return (x <= 0.0F) ? 0.0F - x : x;

当你需要表示一个没有损失或缺失(负值)概念的值时,这就是所谓的“绝对值”。


获得绝对值的逻辑非常简单: "If it's positive, maintain it. If it's negative, negate it"


这意味着您的逻辑和代码应该像下面这样工作:

//If value is negative...
if ( value < 0 ) {
//...negate it (make it a negative negative-value, thus a positive value).
value = negate(value);
}

有两种方法你可以否定一个值:

  1. 通过,呃,否定它的值: value = (-value);
  2. 通过将其乘以“100% 负”或“ -1”: < code > value = value * (- 1) ;

两者实际上是同一枚硬币的两面。只是你通常不记得 value = (-value);实际上是 value = 1 * (-value);


至于如何在 Java 中实现,很简单,因为 Java 已经在 Math class: value = Math.abs(value);中为此提供了一个函数

是的,在没有 Math.abs()的情况下做这件事只是一行非常简单的数学代码,但是为什么要让你的代码看起来丑陋呢?只要使用 Java 提供的 Math.abs()函数!他们这么做是有原因的!

如果您绝对需要跳过这个函数,可以使用 value = (value < 0) ? (-value) : value;,它是我在逻辑(第3部分)中提到的代码的一个更简洁的版本,使用的是 三元操作符(? :)


此外,在某些情况下,您可能希望在一个可能同时接收正值和负值的函数中始终表示丢失或缺失。

不需要进行复杂的检查,您只需获取绝对值,然后对其进行否定: negativeValue = (-Math.abs(value));


考虑到这一点,并考虑像您这样有多个数字之和的情况,实现一个函数将是一个不错的主意:

int getSumOfAllAbsolutes(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += Math.abs(values[i]);
}
return total;
}

根据你可能再次需要相关代码的可能性,将它们添加到你自己的“ utils”库也许是个好主意,首先将这些函数分割成它们的核心组件,然后将最后的函数简单地作为对核心组件现在拆分的函数的调用的巢来维护:

int[] makeAllAbsolute(int[] values){
//@TIP: You can also make a reference-based version of this function, so that allocating 'absolutes[]' is not needed, thus optimizing.
int[] absolutes = values.clone();
for(int i=0; i<values.lenght; i++){
absolutes[i] = Math.abs(values[i]);
}
return absolutes;
}


int getSumOfAllValues(int[] values){
int total = 0;
for(int i=0; i<values.lenght; i++){
total += values[i];
}
return total;
}


int getSumOfAllAbsolutes(int[] values){
return getSumOfAllValues(makeAllAbsolute(values));
}

别这样

Number = (number < 0?-number: number) ;

或者

如(数目 < 0) number =-number;

这将是一个错误,当您在代码上运行 find bug 时,它将报告为 RV _ NEGATING _ Results T _ OF

我建议采取以下解决办法:

没有自由的乐趣:

    value = (value*value)/value

(上述方法实际上并不奏效。)

With lib fun:

   value = Math.abs(value);

试试这个(x 前面的负数是有效的,因为它是一元运算符,查找更多的 给你) :

int answer = -x;

有了这个,你就可以把积极变成消极,把消极变成积极。


然而 ,如果你只想让一个负数变成正数,那么试试这个:

int answer = Math.abs(x);

一个很酷的数学小把戏!把这个数字平方,就能得到 x ^ 2的正值,然后,把这个平方根取出来,就能得到 x 的绝对值:

int answer = Math.sqrt(Math.pow(x, 2));

希望能帮上忙,祝你好运!

可以使用库函数 Math.abs()
Math.abs()返回参数的绝对值

  • 如果参数为负,则返回参数的负值。
  • 如果参数为正,则返回原来的数字。

例如:

  1. int x=-5;
    System.out.println(Math.abs(x));

产出: 5

  1. int y=6;
    System.out.println(Math.abs(y));

产出: 6

你能试试这个吗?

public static int toPositive(int number) {
return number & 0x7fffffff;
}

要将负数转换为正数(这称为绝对值) ,使用 Math.abs ()。这个 Math.abs ()方法是这样工作的

“number = (number < 0 ? -number : number);".

在下面的例子中,Math.abs(-1)将负数1转换为正数1。

例子

Public static void main (String [] args){

    int total = 1 + 1 + 1 + 1 + (-1);
    

//output 3
System.out.println("Total : " + total);
    

int total2 = 1 + 1 + 1 + 1 + Math.abs(-1);
    

//output 5
System.out.println("Total 2 (absolute value) : " + total2);
    

}

输出

总投票率: 3 总计2(绝对值) : 5

在 kotlin 你可以使用 unaryPlus

input = input.unaryPlus()

Https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/unary-plus.html

if(arr[i]<0)


Math.abs(arr[i]);  //1st way (taking absolute value)


arr[i]=-(arr[i]); //2nd way (taking -ve of -ve no. yields a +ve no.)


arr[i]= ~(arr[i]-1);   //3rd way (taking negation)

我看到人们都说 Math.abs(number)但这个方法并不完全证明。

当您尝试包装 Math.abs(Integer.MIN_VALUE)时,这将失败(请参阅参考文献 https://youtu.be/IWrpDP-ad7g)

如果您不确定是否要在输入中接收 Integer.MIN_VALUE。总是建议检查该数字并手动处理它。

在 for 循环中尝试这样做:

sum += Math.abs(arr[i])