课堂中所有的问题及其课后实验性的问题的文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课堂中所有的问题及其课后实验性的问题的文档相关的知识,希望对你有一定的参考价值。

问题一:运行TestDouble.java

代码:

public class TestDouble {

    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));
    }
}

运行结果截图:

技术分享

运行结果分析:

由于使用double类型的数值进行运算时,结果是不准确的,会出现乱码。

原因分析:

计算机不能识别除了二进制以外的任何数据。浮点数由两部分组成:指数和尾数。如果在这个转换的过程中,浮点数参与了计算,那么转换的过程就会变得不可逆,就是在这个过程中,发生了精度的丢失。但是有些浮点计算会得到准确的结果,应该也是碰巧那个计算的二进制与 十进制之间能够准确转换。而当输出单个浮点型数据的时候,可以正确输出,如

double d = 2.4;
System.out.println(d);

输出的是2.4,而不是2.3999999999999999。也就是说,不进行浮点计算的时候,在十进制里浮点数能正确显示。浮点数并不适合用于精确计算,而适合进行科学计算。

 

解决方法:建立一个TestBigDecimal类

代码:


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));
 }
}

运行结果截图:

技术分享

问题提出:在构建TestBigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算机精度问题(为什么会这样呢?)

原因分析:

BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其对应的方法。

问题二:以下代码的输出结果是什么?

int X=100;
  int Y=200;
  System.out.println("X+Y="+X+Y);
  System.out.println(X+Y+"=X+Y");

运行结果截图:

X+Y=100200

300=X+Y

为什么会有这样的输出结果?

“+"只有在两个String类型中或者其中一个是string类型中的时候才起到连接作用,不然只能是运算符。

在system.out.println()中,如果在string字符串后面是+和变量,会把变量转换成string类型,加号起连接作用。

 

 

                                                                                                                                                                                                                                                              信1603  20163549 郭晨晨

 






























以上是关于课堂中所有的问题及其课后实验性的问题的文档的主要内容,如果未能解决你的问题,请参考以下文章

课程作业02-2所有动手动脑问题以及课后实验课堂实验总结

课后作业02-2-课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档。

将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档

将课程中的所有动手动脑的问题以及课后实验性的问题,整理成的一篇文档

课程作业02 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档。

课程作业02 将课程中的所有动手动脑的问题以及课后实验性的问题,整理成一篇文档。