搜索
首页Javajava教程java中double类型运算结果异常的解决方法

问题:

对两个double类型的值进行运算,有时会出现结果值异常的问题。比如:

System.out.println(19.99+20);
  System.out.println(1.0-0.66);
  System.out.println(0.033*100);
  System.out.println(12.3/100);

输出:

39.989999999999995
0.33999999999999997
3.3000000000000003
0.12300000000000001

解决方法:

Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制转化为十进制浮点数时,精度容易丢失,导致精度下降。

要保证精度就要使用BigDecimal类,而且不能直接从double直接转BigDecimal,要将double转string再转BigDecimal。也就是不能使用BigDecimal(double val) 方法,你会发现没有效果。要使用BigDecimal(String val) 方法。具体例子如下所示。

double类型四则运算例子:

1、相加

public static double add(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.add(b2).doubleValue();
  }

2、相减

public static double sub(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.subtract(b2).doubleValue();
  }

3、相乘

public static double mul(double a1, double b1) {
   BigDecimal a2 = new BigDecimal(Double.toString(a1));
   BigDecimal b2 = new BigDecimal(Double.toString(b1));
   return a2.multiply(b2).doubleValue();
  }

4、相除

public static double div(double a1, double b1, int scale) {
  if (scale < 0) {
   throw new IllegalArgumentException("error");
  }
  BigDecimal a2 = new BigDecimal(Double.toString(a1));
  BigDecimal b2 = new BigDecimal(Double.toString(b1));
  return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
 }

scale参数为除不尽时,指定精度。

以上这篇java中double类型运算结果异常的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHP中文网。

更多java中double类型运算结果异常的解决方法相关文章请关注PHP中文网!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境