初学JAVA所遇问题之自动数据类型转换

来源:互联网 发布:java开源商城 编辑:程序博客网 时间:2024/04/29 03:33

初学JAVA 编程用while循环语句计算 1+1/2!+1/2!....1/20!之和;

 

public classPcounter {


         public static void main(String[]args) {
                   // TODO 自动生成的方法存根
                   double i=1,j=1;
                   double sum=0;
                   while(i<20){
           sum += 1/j;
                      j=j*(i+1);
                      i++;
                      }
                   System.out.println("和为:" + sum);
         }


}

第一次编译时:i j  使用的是int 类型,导致sum的结果一直为 1.0 

再改为double后解决问题。google后应该是自动数据类型转换的问题,教材并没有提及这个问题,还有些题目涉及输入的问题,java里不是用cin给变量赋值,只能等之后慢慢的学习才能解决问题。

题目来自《java从入门到精通》清华大学出版社 第四章 实践与练习

以下摘自微学院:http://www.weixueyuan.net/view/5957.html

自动数据类型转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
   
--------------------------------------------->
    byte,short,char-> int-> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

操作数1类型

操作数2类型

转换后的类型

byteshortchar

int

int

byteshortcharint

long

long

byteshortcharintlong

float

float

byteshortcharintlongfloat

double

double

强制数据类型转换

强制转换的格式是在需要转型的数据前加上“( )”,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确,下面的例子可以说明这个问题。

1. publicclassDemo{

2.     publicstaticvoidmain(String[]args){

3.         int x;

4.         double y;

5.         x=(int)34.56+(int)11.2; // 丢失精度

6.         y=(double)x+(double)10+1; // 提高精度

7.         System.out.println("x="+ x);

8.         System.out.println("y="+ y);

9.     }

10.}

运行结果:
x=45
y=56.0

仔细分析上面程序段:由于在 34.56前有一个 int的强制类型转化,所以 34.56就变成了 34。同样 11.2就变成了 11了,所以 x的结果就是 45。在 x前有一个 double类型的强制转换,所以 x的值变为 45.0,而 10的前面也被强制成 double类型,所以也变成 10.0,所以最后 y的值变为 56

 

0 0