java强制转换的问题

源码如下,当输入1234时firstyear得到的数值为1264.85,但是经过
a=(int)(firstyear*100)/100.0;强制转换后得到的值却为1264.84,但是其余的数值却没有问题,谢谢。
import java.util.Scanner;

public class qqqs {

public static void main(String[] agrs){
double firstyear,secondyear,thirdyear,money; //定义变量
Scanner inputmoney=new Scanner(System.in); //构造一个Scanner对象
System.out.println("请输入金额"); //输入初始金额
money=inputmoney.nextDouble(); //将键盘输入的金额传递给变量money
firstyear=money*(1+0.025); //算出第一年的本息总额
secondyear=(1+0.04)*firstyear; //算出第二年的本息总额
thirdyear=(1+0.07)*secondyear; //算出第三年的本息总额
System.out.println("第一年本金加利率="+firstyear);
System.out.println("第二年本金加利率为"+secondyear);
System.out.println("第三年本金加利率为"+thirdyear);
//输出金额
double a,b,c;
//a=Math.round(firstyear);
a=(int)(firstyear*100)/100.0;
b=(int)(secondyear*100)/100.0;
c=(int)(thirdyear*100)/100.0;
System.out.println("第一年保留小数点两位后为"+a);
System.out.println("第二年保留小数点两位后为"+b);
System.out.println("第三年保留小数点两位后为"+c);
inputmoney.close();
}

}

1.由于a,b是int型而h是float型变量,a/b的结果也就是float型,假如想要进行相互赋值,就必须先把他们统一成同一类型的变量。
2.这里的“h=(float)a/b”是指:将整形变量a除以整形变量b的结果强制转化为float型,并将这个值赋给h,并不是申明,申明在前面已经有过了,不需要重复申明。强制转换都是这个格式而已:变量=(右边表达式或者变量要转换成的数据型)变量或者表达式;
3.在这里float是可以改成double的,由于double的数集包含了float,假如a/b的结果转换成double型但是仍在float型的范围内,就可以,假如超过了,就不行。
4.例如,char a='B' ;(这个变量a是char型的,值为'B')
byte c=(byte)a;(我们想把a的值赋给c,但是a为char型的,只好把a的数据型转化成
与 a一样的byte型来实现赋值了)、

写了一大堆,说的不是很清楚,希望能够帮到你,最好还是自己看看书上的例子,再去问问老师,估计你的收获会更大!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-08-30

1264.85无法用double的2次幂的数据结构准确表示,于是变成了一个近似的数字。

如图,说明了是一个怎么样子的近似值。

本回答被提问者采纳