在java中,简单的浮点类型float和double是不能够进行运算。我们先看下面的两个程序代码:

代码一:

import java.util.Scanner;

class Circle {
double radius;
static final double PI=3.14;
public Circle(){this.radius=0;}
public Circle(double r){this.radius=r;}
public double getArea(){return PI*this.radius*this.radius;}
public double getPerimeter(){return 2*PI*this.radius;}
}

public class Cylinder extends Circle {
private double height;
public Cylinder(double r,double h){
this.height=h;
this.radius=r;
}
public double getHeight(){return this.height;}
public double getVol(){return this.height*PI*this.radius*this.radius;}
public void dispVol(){System.out.println("圆柱体的体积:"+this.getVol());}
}

public class Test {

public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入圆的半径以及圆柱体的高:");
double r=input.nextDouble();
double h=input.nextDouble();
Cylinder A =new Cylinder(r,h);
A.dispVol();
}

}

代码二:我们不修改Circle父类和主函数,我们就改一下子类Cylinder中的getVol()方法的方法体  public double getVol(){return this.height*this.getArea();},从上面的程序我们可以看一下,其实可以理解为达到的程序效果是一样的。

但是我们输入7和6,或是6,5,这两组数据时,我们会发现结果有一定的出入了。

结果如下:

代码一:                                                                      代码二:

请输入圆的半径以及圆柱体的高:                                                 请输入圆的半径以及圆柱体的高:
7                                                                                               7
6                                                                                               6
圆柱体的体积:923.16                                                                 圆柱体的体积:923.1600000000001

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

代码一:                                                                       代码二:

请输入圆的半径以及圆柱体的高:                                                 请输入圆的半径以及圆柱体的高:
6                                                                                              6
5                                                                                              5
圆柱体的体积:565.2                                                                圆柱体的体积:565.1999999999999

为什么会出现以上的结果呢?

我们可以这么说,浮点数是不适合精确计算的,而适合于科学计算

举个小例子:1.double a=(1.2-0.4)/0.1;System.out.println(a);2.double a=0.8/0.1;System.out.println(a);这两段代码结果是不同的,第一个结果是7.9999999999999999,第二个结果是8.0。我们都知道,计算机里面数的计算都是二进制计算的,我们其实输入的十进制数,有些十进制数转换成二进制是可以精确转换,而有些转换则不是精确转换,得到的是一个最靠近它的数,所以这里面就存在一个误差。另外,如果浮点数不进行计算时,在十进制里面浮点数能正确显示,如果浮点数参与了计算,那么浮点数二进制与十进制间的转换过程就会变得不可而知,变得不可逆。那么,我们怎样用浮点数来进行精确计算呢?

方法一:Math.round(value*100)/100.0; 如果value为4.015,那么结果保留两位小数为4.01,但是我们心里想的是4.02,因为四舍五入嘛。

方法二:DecimalFormat("0.00").format(4.015);这条代码的结果也是同样的保留两位小数为4.01,并非4.02

方法三:new java.math.BigDecimal(Double.toString(4.015)).setScale(2,java.math.BigDecimal.ROUND_HALF_UP).doubleValue();这条代码的结果同样的是保留两位小数,但是却为4.02,真正的是四舍五入

关于以上的三个方法的代码,可以参考java API 文档。以上的就是一个JAVA初学者的一点小小的总结,希望大家多点评价和讨论!感谢!

转载于:https://www.cnblogs.com/weihao950903/p/5335279.html

Java中的简单浮点数类型float和double不能够进行精确运算相关推荐

  1. java学习第一课----java中8种基本类型

    基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型,因此面试题中也总少不了它们的身影,在这篇文章中我们将从面试中常考的几个方面来回顾一下与基本类型相关的知识. ...

  2. java中引用类型和基本类型的区别

    java中引用类型和基本类型的区别 一.数据类型 1.基本类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long.int.short.byte ②浮点类型:float.double ③字符类 ...

  3. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 话说:"天地开辟,未有人民,女娲抟土为人."女娲需要用土造出一个个的人,但在女娲造出人之前, ...

  4. Java中的简单REST客户端

    如今,大多数用于与某些服务器通信的移动应用程序都使用REST服务. 这些服务也是与JavaScript或jQuery一起使用的常见做法. 现在,我知道在Java中为REST服务创建客户端的2种方法,在 ...

  5. java判断float相等_在java中判断两个浮点型(float)数据是否相等的案例

    示例代码: public static void main(String[] args) { float a = 10.222222225f; float b = 10.222222229f; Sys ...

  6. Java中八种基础类型

    Java中的八种基本数据类型 1.说来惭愧,已经是第二次有人面我关于Java中八种基本类型的问题了,我竟然还没有答出来. 逻辑型:boolean 字符型:char 整数型:byte,short,int ...

  7. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  8. Java中Object转换为List类型

    前言 在很多项目编写过程中会使用Map<?>类型来进行参数的传递.为了能够让更多的类型放入value中,实例化的类型往往是Map<String, Object>来存放数据. 解 ...

  9. java中两种异常类型_Java中的三种异常类型

    java中两种异常类型 Errors are the bane of users and programmers alike. Developers obviously don't want thei ...

最新文章

  1. 程序员如何切入区块链去中心化应用开发
  2. FACTORY设计模式【让吃货也能理解的程序】
  3. MS SQL专用管理员连接DAC
  4. 一群人围成一圈从123报数,如果报到3就退出该圈中,直到最后一个人留下来!...
  5. 小米闪购首页实战(HTML+CSS+JS)
  6. Linux ---- 安装虚拟机
  7. 搭建moon服务器,实现zerotier飞速穿透
  8. Linux oracle 怎么安装,oracle在linux下怎么安装
  9. 知网下载的PDF论文,如何加目录的方法
  10. 起枪还是ECO ? CSGO什么时候起长枪 CSGO超实用教学
  11. php imagick加GD实现gif图换脸动画生成表情包制作功能
  12. 实用创意马赛克效果短视频转场过渡pr模板
  13. ChatGPT修bug横扫全场,准确率达78%!程序员喜忧参半
  14. 介绍一个使用 Go 语言开发的高性能可配置可扩展的日志库 logit
  15. 上网十八手 做出个倒数计时器
  16. 打开anaconda prompt 出错 import ctypes
  17. Android activity间的数据回传
  18. python体测成绩数据分析_【Python数据分析】四级成绩分布 -matplotlib,xlrd 应用
  19. android apk 反编译 工具下载,android APK反编译工具Apktool
  20. 3D游戏编程学习笔记(七):模型与动画

热门文章

  1. Altair FluxMotor 2020中文版
  2. mysql -- 学习记录
  3. web项目中关于引入JS/css文件, 浏览器console出现 net::ERR_ABORTED错误的解决方法
  4. 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)
  5. Winsock服务器设计的四个关键问题
  6. 九种东西吃多会...
  7. 下一代 Debian - \'Lenny\' 代码冻结
  8. react-native-webview禁止缩放
  9. 项目开发中关于jquery中出现问题小结(textarea,disabled,关键字等)
  10. 【Linux】开源分布式存储系统:GlusterFS