行业资讯 2025年08月6日
0 收藏 0 点赞 564 浏览 2325 个字
摘要 :

文章目录 1.什么是绝对值? 2.Java Math.abs() 函数 3. 溢出/下溢问题 4.使用Math.absExact()防止溢出/下溢 5. 结论 本文主要讲解Java中Math.abs()用法和Math.absExact……




  • 1.什么是绝对值?
  • 2.Java Math.abs() 函数
  • 3. 溢出/下溢问题
  • 4.使用Math.absExact()防止溢出/下溢
  • 5. 结论

本文主要讲解Java中Math.abs()用法和Math.absExact() 用法。Java中的Math类包含执行常见数学运算的方法。处理绝对值的重要方法有两个:Math.abs()和Math.absExact()。本Java教程将探讨Math.abs()方法的绝对值、溢出和下溢问题,并介绍如何使用Math.absExact()解决这些问题。

1.什么是绝对值?

实数的绝对值,通常用|x|表示,是x的非负值,不考虑其符号。换句话说,它是该数在数轴上与零的距离。
这里有几个例子来解释这个概念:

  • ∣5∣=5 因为 5 是正数。
  • ∣−8∣=8 因为 -8 的绝对值是 8。
  • ∣0∣=0 因为 0 的绝对值是 0。

绝对值常用于计算或表示距离,例如海平面上的距离。无论是潜水员潜水还是登山者爬山,海平面上的距离始终是一个正数。

2.Java Math.abs() 函数

Math.abs()用于获取数值或表达式的绝对值。它接受int、long、float和double类型的参数。

public static double abs(double a)
public static float abs(float a)
public static int abs(int a)
public static long abs(long a)

例如,我们可以这样使用abs():

double doubleValue = -10.56;
float floatValue = -7.8f;
int intValue = -15;
long longValue = -123456789L;

System.out.println(STR.\"double绝对值: \\{Math.abs(doubleValue)}\");
System.out.println(STR.\"float绝对值: \\{Math.abs(floatValue)}\");
System.out.println(STR.\"int绝对值: \\{Math.abs(intValue)}\");
System.out.println(STR.\"long绝对值: \\{Math.abs(longValue)}\");

程序输出:

double绝对值: 10.56 float绝对值: 7.8 int绝对值: 15 long绝对值: 123456789 

3. 溢出/下溢问题

虽然Math.abs()本身不会直接导致溢出或下溢问题,但在处理大数值时,了解此函数的行为至关重要,因为它可能间接导致这类问题。
考虑以下程序:

int intMinValue = Integer.MIN_VALUE;
long longMinValue = Long.MIN_VALUE;

System.out.println(STR.\"int绝对值: \\{Math.abs(intMinValue)}\");  
System.out.println(STR.\"long绝对值: \\{Math.abs(longMinValue)}\");

程序输出:

int绝对值: -2147483648
long绝对值: -9223372036854775808

这结果就有问题。绝对值永远不应该是负值。在这些情况下,因为绝对值大于MAX_VALUE,从而导致了下溢问题。

如果我们不注意这些边界情况,程序中可能会出现意外的结果。

4.使用Math.absExact()防止溢出/下溢

从JDK 15开始,Math类增加了两个absExact()方法,一个用于int类型,另一个用于long类型。如果数学绝对值的结果容易超出int或long的边界,这些方法将抛出ArithmeticException,而不是返回误导性的结果。
让我们用absExact()方法重新运行之前的程序。

System.out.println(STR.\"int绝对值: \\{Math.absExact(intMinValue)}\");

Exception in thread \"main\" java.lang.ArithmeticException: Overflow to represent absolute value of Integer.MIN_VALUE
    at java.base/java.lang.Math.absExact(Math.java:1903)
    at com.howtodoinjava.core.basic.MathAbsoluteExamples.main(MathAbsoluteExamples.java:25)

对于非边界值,Math.abs()和Math.absExact()的工作方式类似。

如果你使用的Java版本低于15,可以自己编写边界情况的检查:

public static int absExact(int a) {

  if (a == Integer.MIN_VALUE)
      throw new ArithmeticException(
          \"Overflow to represent absolute value of Integer.MIN_VALUE\");
  else
      return abs(a);
}

5. 结论

从Java 15开始,建议在计算数字绝对值的地方使用Math.absExact()。这将自动防止溢出和下溢问题。在Java 15之前,请自行添加边界情况的检查。

如果你需要处理非常大的数字或需要任意精度,请考虑使用专门的类,如BigInteger或BigDecimal,这些类可以处理此类场景而不会发生溢出或下溢。

以上就是Java中Math.abs()用法和Math.absExact() 用法,希望对你有帮助,学习愉快!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/10143.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号