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

初学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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值