ppt课件动手动脑实际验证
1关于double精度
  源代码:
public class Doublejingdu {
	public static void main(String[] args) {
		System.out.println("0.05+0.01="+(0.05+0.01));
		System.out.println("1.0-0.42="+(1.0-0.42));
		System.out.println("4.015*100="+(4.015*100));
		System.out.println("123.3/100="+(123.3/100));
	}
}
实验结果:
0.05+0.01=0.060000000000000005
1.0-0.42=0.5800000000000001
4.015*100=401.49999999999994
123.3/100=1.2329999999999999
原因:
原因在于我们的计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。如:2.4的二进制表示并非就是精确的2.4。反而最为接近的二进制表示是 2.3999999999999999
Double:100000000100000000000000000000000000000000000000000000000000000
Float:1000001000000000000000000000000
对于输出结果分析如下。对于都不 double 的二进制左边补上符号位 0 刚好可以得到 64 位的二进制数。根据double的表 示法,分为符号数、幂指数和尾数三个部分如下:
0 10000010111 0011000101100111100101110000000000000000000000000000
对于 float 左边补上符 号位 0 刚好可以得到 32 位的二进制数。 根据float的表示法, 也分为 符号数、幂指数和尾数三个部分如下 :
0 10010111 00110001011001111001100
绿色部分是符号位,红色部分是幂指数,蓝色部分是尾数。
对比可以得出:符号位都是 0 ,幂指数为移码表示,两者刚好也相等。唯一不同的是尾数。
在 double 的尾数 为: 001100010110011110010111 0000000000000000000000000000 ,省略后面的零,至少需要24位才能正确表示 。
而在 float 下面尾数 为: 00110001011001111001100 ,共 23 位。
为什么会这样?原因很明显,因为 float尾数 最多只能表示 23 位,所以 24 位的 001100010110011110010111 在 float 下面经过四舍五入变成了 23 位的 00110001011001111001100 。所以 20014999 在 float 下面变成了 20015000 。
也就是说 20014999 虽然是在float的表示范围之内,但 在 IEEE 754 的 float 表示法精度长度没有办法表示出 20014999 ,而只能通过四舍五入得到一个近似值。
浮点运算很少是精确的,只要是超过精度能表示的范围就会产生误差。往往产生误差不是 因为数的大小,而是因为数的精度。因此,产生的结果接近但不等于想要的结果。尤其在使用 float 和 double 作精确运 算的时候要特别小心。
2.枚举
public class EnumTest {
public static void main(String[] args) {
		Size s=Size.SMALL;
		Size t=Size.LARGE;
		//s和t引用同一个对象?
		System.out.println(s==t);  //
		//是原始数据类型吗?
		System.out.println(s.getClass().isPrimitive());
		//从字符串中转换
		Size u=Size.valueOf("SMALL");
		System.out.println(s==u);  //true
		//列出它的所有值
		for(Size value:Size.values()){
			System.out.println(value);
		}
	}
}
 enum Size{SMALL,MEDIUM,LARGE};
输出结果:
false
false
true
SMALL
MEDIUM
LARGE
3.求和
package text;
//An addition program
import javax.swing.JOptionPane; // import class JOptionPane
public class Addition {
public static void main( String args[] )
{
   String firstNumber,   // first string entered by user
          secondNumber;  // second string entered by user
   int number1,          // first number to add
       number2,          // second number to add
       sum;              // sum of number1 and number2
// read in first number from user as a string
   firstNumber =
      JOptionPane.showInputDialog( "Enter first integer" );
// read in second number from user as a string
   secondNumber =
      JOptionPane.showInputDialog( "Enter second integer" );
// convert numbers from type String to type int
   number1 = Integer.parseInt( firstNumber ); 
   number2 = Integer.parseInt( secondNumber );
// add the numbers
   sum = number1 + number2;
// display the results
   JOptionPane.showMessageDialog(
      null, "The sum is " + sum, "Results",
      JOptionPane.PLAIN_MESSAGE );
System.exit( 0 );   // terminate the program
}
}
4.键盘输入
源代码
package text;
/**
@version 1.10 2004-02-10
@author Cay Horstmann
*/
import java.util.*;
public class InputTest
{  
public static void main(String[] args)
{  
   Scanner in = new Scanner(System.in);
// get first input
   System.out.print("What is your name? ");
   String name = in.nextLine();
// get second input
   System.out.print("How old are you? ");
   int age = in.nextInt();
/* int i;
  String value="100";
  i=Integer.parseInt(value);
  i=200;
  String s=String.valueOf(i);*/
// display output on console
   System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1));
}
}
5.使用BigDecimal类
源代码
import java.math.BigDecimal;
public class TestBigDecimal
{
	public static void main(String[] args) 
	{
		BigDecimal f1 = new BigDecimal("0.05");
		BigDecimal f2 = BigDecimal.valueOf(0.01);
		BigDecimal f3 = new BigDecimal(0.05);
		System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
		System.out.println("0.05 + 0.01 = " + f1.add(f2));
		System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
		System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
		System.out.println("0.05 / 0.01 = " + f1.divide(f2));
		System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
		System.out.println("0.05 + 0.01 = " + f3.add(f2));
		System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
		System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
		System.out.println("0.05 / 0.01 = " + f3.divide(f2));
	}
}
5.选择结构
import java.math.BigDecimal;
public class TestBigDecimal
{
	public static void main(String[] args) 
	{
		BigDecimal f1 = new BigDecimal("0.05");
		BigDecimal f2 = BigDecimal.valueOf(0.01);
		BigDecimal f3 = new BigDecimal(0.05);
		System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
		System.out.println("0.05 + 0.01 = " + f1.add(f2));
		System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
		System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
		System.out.println("0.05 / 0.01 = " + f1.divide(f2));
		System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
		System.out.println("0.05 + 0.01 = " + f3.add(f2));
		System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
		System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
		System.out.println("0.05 / 0.01 = " + f3.divide(f2));
	}
}
ppt课件动手动脑实际验证的更多相关文章
- java学习(4)——动手动脑
		
根据ppt所给的例子,运行的结果如下所示: ppt中出现的第二个动手动脑如下: 代码如下: 其运行结果如下: 作出简单的分析如下:有点类似于if 和else的关系,总是对应try和catch同层中的异 ...
 - 03-方法ppt动手动脑问题及课后实验性问题总结
		
一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...
 - java学习——关于java课件上动手动脑问题简单的分析
		
问题一:关于以下的代码为什么会产生错误的问题的简单分析. 第一个动手动脑提供了一下的代码,可以发现,在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到j ...
 - java第二次课件课后动手动脑习题整理总结(2019年9月23号)
		
一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...
 - java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )
		
一.课堂测试 1.课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求 (1)减法结果不能为负数 (2)乘法结果不得超过一百,除法结果必须为整数 (3)题目避免重复: (4)可 ...
 - java语言课堂动手动脑
		
1 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是 ...
 - Java类和对象动手动脑
		
动手动脑1 以下代码为何无法通过编译?哪儿出错了?
 - java语法基础--动手动脑问题及课后实验问题
		
---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...
 - java异常处理动手动脑问题解决和课后总结
		
动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...
 
随机推荐
- Java集合框架之HashMap浅析
			
Java集合框架之HashMap浅析 一.HashMap综述: 1.1.HashMap概述 位于java.util包下的HashMap是Java集合框架的重要成员,它在jdk1.8中定义如下: pub ...
 - Python处理NetCDF格式数据为TIFF数据(附脚本代码)
			
博客小序:NetCDF格式数据广泛应用于科学数据的存储,最近几日自己利用python处理了一些NetCDF数据,特撰此博文以记之. 参考博客: https://www.cnblogs.com/shou ...
 - spring加载bean流程解析
			
spring作为目前我们开发的基础框架,每天的开发工作基本和他形影不离,作为管理bean的最经典.优秀的框架,它的复杂程度往往令人望而却步.不过作为朝夕相处的框架,我们必须得明白一个问题就是sprin ...
 - JMeter更改语言为英文
			
1. 进入目录apache-jmeter-2.13\bin 2. 打开jmeter.properties 3. 取消“language=en”前的注释 4. 重新打开JMeter,即可看到语言已经变成 ...
 - hdu6219 Empty Convex Polygons (最大空凸包板子
			
https://vjudge.net/contest/324256#problem/L 题意:给一堆点,求最大空凸包面积. 思路:枚举凸包左下角点O,dp找出以这个点为起始位置能构成的最大空凸包面积, ...
 - CodeForces - 697C-Lorenzo Von Matterhorn(有点像LCA,原创
			
传送门: CodeForces - 697C 原创--原创--原创 第一次自己A了一道感觉有点难度的题: 题意:在一个类似于二叉树的图上,1 : u ,v,w 表示从u到v的所以路都加上w的费用: 2 ...
 - codeforces 813 D. Two Melodies(dp)
			
题目链接:http://codeforces.com/contest/813/problem/D 题意:求两个不相交的子集长度之和最大是多少,能放入同一子集的条件是首先顺序不能变,然后每一个相邻的要么 ...
 - 51nod 1020 逆序排列(dp,递推)
			
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1020 题意:是中文题. 题解:很显然要设dp[i][j]表示 ...
 - window下tomcat的下载安装和环境配置
			
一.下载安装tomcat 去官网:http://tomcat.apache.org/ 下载自己所需要的版本,解压在没有中文的文件夹路径下. 直接打开压缩包下面,进入bin目录,双击startup.b ...
 - 使用Quarkus在Openshift上构建微服务的快速指南
			
在我的博客上,您有机会阅读了许多关于使用Spring Boot或Micronaut之类框架构建微服务的文章.这里将介绍另一个非常有趣的框架专门用于微服务体系结构,它越来越受到大家的关注– Quarku ...