Java中精确的浮点运算操作示例

 更新时间:2017年06月12日 09:45:09   作者:qq7342272  
这篇文章主要介绍了Java中精确的浮点运算操作方法,结合具体实例形式分析了java浮点数运算的相关函数、使用技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Java中精确的浮点运算操作。分享给大家供大家参考,具体如下:

Java中浮点运算对于很多值浮点数都是采用其能够表示的离目标值最近的数来表示,这有可能会在计算中带来不易觉察的误差。

如下所例:

public class ssss {
  public static void main(String[] ages){
    double d1=2.07;
    double d2=1.03;
    System.out.println(d1+d2);
  }
}

结果:

虽然计算结果离精确值误差很小,但其不是精确的!这在像如金融计算一样计算精确度要求很高的领域是无法接受的,但这是二进制本身的问题,而计算机普遍采用二进制表示,使用基本数据类型无法解决。

为了解决基本数据类型浮点数不能进行精确计算的问题,Java中专门提供了java.math.BigDecimal类,其提供浮点数的精确计算功能。与BigInteger类相同,其运算操作均使用方法调用完成

demo

public class ssss {
  public static void main(String[] ages){
    BigDecimal b1=new BigDecimal("2.07");
    BigDecimal b2=new BigDecimal("1.03");
    System.out.println("相加运算:");
    System.out.println("b1:"+b1);
    System.out.println("b2:"+b2);
    System.out.println("相加值:"+b1.add(b2));
  }
}

输出值:

其余函数参造下表

 BigDecimal abs()
          返回 BigDecimal,其值为此 BigDecimal 的绝对值,其标度为 this.scale()。
 BigDecimal abs(MathContext mc)
          返回其值为此 BigDecimal 绝对值的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal add(BigDecimal augend)
          返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())。
 BigDecimal add(BigDecimal augend, MathContext mc)
          返回其值为 (this + augend) 的 BigDecimal(根据上下文设置进行舍入)。
 byte byteValueExact()
          将此 BigDecimal 转换为 byte,以检查丢失的信息。
 int compareTo(BigDecimal val)
          将此 BigDecimal 与指定的 BigDecimal 比较。
 BigDecimal divide(BigDecimal divisor)
          返回一个 BigDecimal,其值为 (this / divisor),其首选标度为 (this.scale() - divisor.scale());如果无法表示准确的商值(因为它有无穷的十进制扩展),则抛出 ArithmeticException。
 BigDecimal divide(BigDecimal divisor, int roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。
 BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。
 BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。
 BigDecimal divide(BigDecimal divisor, MathContext mc)
          返回其值为 (this / divisor) 的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
          返回一个 BigDecimal,其值为 (this / divisor),其标度为 this.scale()。
 BigDecimal[] divideAndRemainder(BigDecimal divisor)
          返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟对两个操作数计算所得到的 remainder。
 BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
          返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟根据上下文设置对两个操作数进行舍入计算所得到的 remainder 的结果。
 BigDecimal divideToIntegralValue(BigDecimal divisor)
          返回 BigDecimal,其值为向下舍入所得商值 (this / divisor) 的整数部分。
 BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
          返回 BigDecimal,其值为 (this / divisor) 的整数部分。
 double doubleValue()
          将此 BigDecimal 转换为 double。
 boolean equals(Object x)
          比较此 BigDecimal 与指定的 Object 的相等性。
 float floatValue()
          将此 BigDecimal 转换为 float。
 int hashCode()
          返回此 BigDecimal 的哈希码。
 int intValue()
          将此 BigDecimal 转换为 int。
 int intValueExact()
          将此 BigDecimal 转换为 int,以检查丢失的信息。
 long longValue()
          将此 BigDecimal 转换为 long。
 long longValueExact()
          将此 BigDecimal 转换为 long,以检查丢失的信息。
 BigDecimal max(BigDecimal val)
          返回此 BigDecimal 和 val 的最大值。
 BigDecimal min(BigDecimal val)
          返回此 BigDecimal 和 val 的最小值。
 BigDecimal movePointLeft(int n)
          返回一个 BigDecimal,它等效于将该值的小数点向左移动 n 位。
 BigDecimal movePointRight(int n)
          返回一个 BigDecimal,它等效于将该值的小数点向右移动 n 位。
 BigDecimal multiply(BigDecimal multiplicand)
          返回一个 BigDecimal,其值为 (this × multiplicand),其标度为 (this.scale() + multiplicand.scale())。
 BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
          返回其值为 (this × multiplicand) 的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal negate()
          返回 BigDecimal,其值为 (-this),其标度为 this.scale()。
 BigDecimal negate(MathContext mc)
          返回其值为 (-this) 的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal plus()
          返回 BigDecimal,其值为 (+this),其标度为 this.scale()。
 BigDecimal plus(MathContext mc)
          返回其值为 (+this) 的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal pow(int n)
          返回其值为 (thisn) 的 BigDecimal,准确计算该幂,使其具有无限精度。
 BigDecimal pow(int n, MathContext mc)
          返回其值为 (thisn) 的 BigDecimal。
 int precision()
          返回此 BigDecimal 的精度。
 BigDecimal remainder(BigDecimal divisor)
          返回其值为 (this % divisor) 的 BigDecimal。
 BigDecimal remainder(BigDecimal divisor, MathContext mc)
          返回其值为 (this % divisor) 的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal round(MathContext mc)
          返回根据 MathContext 设置进行舍入后的 BigDecimal。
 int scale()
          返回此 BigDecimal 的标度。
 BigDecimal scaleByPowerOfTen(int n)
          返回其数值等于 (this * 10n) 的 BigDecimal。
 BigDecimal setScale(int newScale)
          返回一个 BigDecimal,其标度为指定值,其值在数值上等于此 BigDecimal 的值。
 BigDecimal setScale(int newScale, int roundingMode)
          返回一个 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。
 BigDecimal setScale(int newScale, RoundingMode roundingMode)
          返回 BigDecimal,其标度为指定值,其非标度值通过此 BigDecimal 的非标度值乘以或除以十的适当次幂来确定,以维护其总值。
 short shortValueExact()
          将此 BigDecimal 转换为 short,以检查丢失的信息。
 int signum()
          返回此 BigDecimal 的正负号函数。
 BigDecimal stripTrailingZeros()
          返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。
 BigDecimal subtract(BigDecimal subtrahend)
          返回一个 BigDecimal,其值为 (this - subtrahend),其标度为 max(this.scale(), subtrahend.scale())。
 BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
          返回其值为 (this - subtrahend) 的 BigDecimal(根据上下文设置进行舍入)。
 BigInteger toBigInteger()
          将此 BigDecimal 转换为 BigInteger。
 BigInteger toBigIntegerExact()
          将此 BigDecimal 转换为 BigInteger,以检查丢失的信息。
 String toEngineeringString()
          返回此 BigDecimal 的字符串表示形式,需要指数时,则使用工程计数法。
 String toPlainString()
          返回不带指数字段的此 BigDecimal 的字符串表示形式。
 String toString()
          返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。
 BigDecimal ulp()
          返回此 BigDecimal 的 ulp(最后一位的单位)的大小。
 BigInteger unscaledValue()
          返回其值为此 BigDecimal 的非标度值 的 BigInteger。
static BigDecimal valueOf(double val)
          使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。
static BigDecimal valueOf(long val)
          将 long 值转换为具有零标度的 BigDecimal。
static BigDecimal valueOf(long unscaledVal, int scale)
          将 long 非标度值和 int 标度转换为 BigDecimal。

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《java日期与时间操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java实现RSA算法的方法详解

    Java实现RSA算法的方法详解

    这篇文章主要介绍了Java实现RSA算法的方法,结合实例形式分析了RSA算法的原理、实现与使用方法,需要的朋友可以参考下
    2018-03-03
  • Java生成读取条形码和二维码的简单示例

    Java生成读取条形码和二维码的简单示例

    条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的规则排列,用来表示一组信息的图形标识符,而二维码大家应该都很熟悉了,这篇文章主要给大家介绍了关于Java生成读取条形码和二维码的相关资料,需要的朋友可以参考下
    2021-07-07
  • Java内部类和异常类的概念以及使用

    Java内部类和异常类的概念以及使用

    这篇文章主要介绍了Java内部类和异常类的概念以及使用,文中有非常详细的代码以及注释,适合正在学习java基础的同学们使用,需要的朋友可以参考下
    2021-04-04
  • SpringBoot详细讲解断言机制原理

    SpringBoot详细讲解断言机制原理

    断言Assertion是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是org.junit.jupiter.api.Assertions的静态方法。检查业务逻辑返回的数据是否合理。所有的测试运行结束以后,会有一个详细的测试报告
    2022-06-06
  • 浅谈Java编程ToString()方法重写的意义

    浅谈Java编程ToString()方法重写的意义

    这篇文章主要介绍了浅谈Java编程ToString()方法重写的意义,还是挺不错的,这里分享给大家,供朋友们学习和参考。
    2017-10-10
  • 用java开发dota英雄最华丽的技能(实例讲解)

    用java开发dota英雄最华丽的技能(实例讲解)

    下面小编就为大家分享一篇使用java开发dota英雄最华丽的技能实例,具有非常好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • java实现变更文件查询的方法

    java实现变更文件查询的方法

    这篇文章主要介绍了java实现变更文件查询的方法,可通过java查询文件最后修改时间的方法实现查找变更文件的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • springmvc 中dao层和service层的区别说明

    springmvc 中dao层和service层的区别说明

    这篇文章主要介绍了springmvc 中dao层和service层的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringBoot实现application配置信息加密

    SpringBoot实现application配置信息加密

    在配置文件中,我们有开发环境配置和生产环境配置,而生产环境的配置信息是需要做好防护的,避免外泄,所以本文为大家整理了application配置信息加密的方法,需要的可以参考下
    2023-07-07
  • Spring Boot2.x集成JPA快速开发的示例代码

    Spring Boot2.x集成JPA快速开发的示例代码

    这篇文章主要介绍了Spring Boot2.x集成JPA快速开发,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论