Java BigDecimal基础用法详解

Java BigDecimal基础用法详解

什么是BigDecimal

Java中的float和double类型是不能精确表示十进制数的,这对于很多需要精确计算的场景是不适用的。而BigDecimal是Java提供的一个可以精确表示任意大小和精度的十进制数类。

常用构造方法

  • BigDecimal(double val):通过一个Double类型的值来构造BigDecimal对象。由于double不能表示精确的十进制数,并且在转换过程中可能存在精度损失,因此可能会出现不完全精确的结果。

  • BigDecimal(String val):通过一个String类型的值来构造BigDecimal对象。String类型的表示方式可以精确地描述十进制数,因此可以获得完全精确的结果。

示例代码:

BigDecimal bd1 = new BigDecimal(2.01);
System.out.println(bd1); // 输出结果为2.010000000000000000708874089455323329925537109375

BigDecimal bd2 = new BigDecimal("2.01");
System.out.println(bd2); // 输出结果为2.01

常用操作方法

  • add(BigDecimal augend):将当前对象与augend相加。

  • subtract(BigDecimal subtrahend):将当前对象减去subtrahend。

  • multiply(BigDecimal multiplicand):将当前对象乘以multiplicand。

  • divide(BigDecimal divisor):将当前对象除以divisor。

  • compareTo(BigDecimal val):比较当前对象与val的大小。

示例代码:

BigDecimal bd1 = new BigDecimal("2.01");
BigDecimal bd2 = new BigDecimal("3.02");
BigDecimal bd3 = bd1.add(bd2);
System.out.println("2.01 + 3.02 = " + bd3); // 输出结果为5.03

BigDecimal bd4 = bd2.subtract(bd1);
System.out.println("3.02 - 2.01 = " + bd4); // 输出结果为1.01

BigDecimal bd5 = bd1.multiply(bd2);
System.out.println("2.01 * 3.02 = " + bd5); // 输出结果为6.0902

BigDecimal bd6 = bd2.divide(bd1);
System.out.println("3.02 / 2.01 = " + bd6); // 输出结果为1.5024875621890547

int result = bd1.compareTo(bd2);
if (result < 0) {
    System.out.println("2.01 < 3.02");
} else if (result > 0) {
    System.out.println("2.01 > 3.02");
} else {
    System.out.println("2.01 = 3.02");
}

常用取整方法

  • setScale(int newScale, int roundingMode):将当前对象的小数位数设置为newScale。

  • intValue():将当前对象转换成int类型的值,并截断小数部分。

  • longValue():将当前对象转换成long类型的值,并截断小数部分。

  • doubleValue():将当前对象转换成double类型的值,可能会存在精度损失。

  • toPlainString():将当前对象转换成String类型的值,精度完整。

示例代码:

BigDecimal bd1 = new BigDecimal("3.1415926");
BigDecimal bd2 = bd1.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("3.1415926取两位小数后为:" + bd2); // 输出结果为3.14

System.out.println(bd2.intValue()); // 输出结果为3
System.out.println(bd2.longValue()); // 输出结果为3
System.out.println(bd2.doubleValue()); // 输出结果为3.14
System.out.println(bd2.toPlainString()); // 输出结果为3.14

总结

在进行数值计算时,如果数据要求精度比较高,不能使用float、double类型,可以选择使用BigDecimal类型进行处理。我们可以通过BigDecimal对象提供的一系列方法,实现数值计算、比较、取整等功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java BigDecimal基础用法详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java.lang.Runtime.exec的左膀右臂:流输入和流读取详解

    Java提供了Runtime.exec()方法来启动一个新进程。该方法可以返回Process对象,通过该对象可以控制和管理子进程的输入、输出以及错误流。这个方法中的参数是一个字符串,它描述了一个shell命令,应该如何来运行这个新的子进程。 为了更好地使用exec()方法,在使用exec()的时候,我们应该学会: 1.正确处理进程输出 2.合并输出流,正确地…

    Java 2023年5月26日
    00
  • JDBC常用接口总结

    对于JDBC常用接口总结的完整攻略,首先我们需要了解下JDBC的基本概念和使用的流程。JDBC即Java Database Connectivity,它是一种用于处理Java与数据库之间连接通讯的API。在Java中,我们可以使用JDBC与各种数据库进行交互,常见的包括MySQL、Oracle、SQL Server等。 在使用JDBC时,我们需要依次完成以下…

    Java 2023年5月20日
    00
  • Java线程安全与非线程安全解析

    Java线程安全与非线程安全解析 Java的线程安全问题是非常重要的一个主题,尤其是在多线程程序的开发中。本文将从线程安全和非线程安全的概念入手,深入探讨Java线程安全与非线程安全的区别,并以代码示例详细说明。 线程安全与非线程安全 Java中的线程安全问题可以简单理解为多线程同时访问同一块内存时所出现的问题。如果多个线程并发地访问同一块内存时,程序仍然能…

    Java 2023年5月19日
    00
  • spring boot RestTemplate 发送get请求的踩坑及解决

    关于“spring boot RestTemplate 发送get请求的踩坑及解决”的完整攻略,我将分为以下几个部分逐一进行讲解: 介绍RestTemplate发送get请求的基本用法 分析在发送get请求时可能遇到的踩坑 解决get请求中可能遇到的问题 最后,提供至少两个示例说明。 1. RestTemplate发送get请求的基本用法 RestTempl…

    Java 2023年5月26日
    00
  • Java RandomAccessFile的用法详解

    Java RandomAccessFile的用法详解 概述 Java RandomAccessFile是一个可以自由地读取文件内容的类,具体操作可以是文件任意位置的读、写和插入操作,支持读取任意类型的数据。 文件操作的基本流程是:我们先打开一个文件句柄(File),然后通过文件句柄创建 RandomAccessFile 对象,然后通过 RandomAcces…

    Java 2023年5月19日
    00
  • Springmvc @PathVariable的用法解析

    SpringMVC @PathVariable的用法解析 在SpringMVC中,@PathVariable注解用于将URL中的变量绑定到方法的参数上。本文将详细介绍@PathVariable的用法和示例。 基本用法 @PathVariable注解可以用于方法的参数上,用于将URL中的变量绑定到方法的参数上。例如: @GetMapping("/us…

    Java 2023年5月17日
    00
  • Jenkins一键打包部署SpringBoot应用

    针对“Jenkins一键打包部署SpringBoot应用”的完整攻略,我将从以下几个方面进行详细讲解: 前置条件 在使用Jenkins进行一键打包部署SpringBoot应用之前,我们需要进行一些准备工作,包括: 安装好Jenkins 在Jenkins中安装好“Pipeline”和“Git”插件 在本地安装好Git工具 保证环境中已经正确配置好了Java开发…

    Java 2023年5月19日
    00
  • Java实现从jar包中读取指定文件的方法

    当我们需要从Java的一个jar包中读取指定的文件时,可以采用以下的几种方法,下面将针对每种方法进行详细讲解。 方法一:使用ClassLoader.getResourceAsStream()方法 该方法可以从一个jar包中直接读取文件的输入流,可以通过下面的步骤来实现: 确定需要读取的文件名,如 config.properties。 获取到当前线程的Clas…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部