大学生能做什么兼职:哪位高手帮帮我,小弟初学java编程被卡在这了,万分感谢!!请问一个java编程中碰到的小问题。

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/05 00:51:49
哪位高手帮帮我,小弟初学编程被卡在这了!!万分感谢!!
我碰到了一个问题,我用jdk1.5.0,
输入一:
double x=27.475;
double y=7.22;
double z=x-y;
System.out.println("z="+z);
得到:z=20.255000000000003
为什么末尾多了个3????????????
输入二:
double n=0.0000000000012345678901234567890123456789;
System.out.println("n="+n);
得到:1.2345678901234569E-12
为什么末尾是9?????????
输入三:
double n=0.00000000012345678901234567890123456789;
System.out.println("n="+n);
得到:1.2345678901234568E-10
为什么末尾是8,与输入二唯一不同的是小数点后少两个0,末尾的9怎么就变成8了????????
输入四:
float n=0.123;
System.out.println("n="+n);
得到:在编译时出错,
possible loss of precision
found:double
required:float
float n=0.123;
^
此表达式“float n=0.123;”有什么错吗???
请问怎么回事?
是不是jdk1.5.0有bug,怎么一个简单的浮点显示和计算,也不行?
谢谢各位的回答,
精度误差会传递吗?由此产生越来越大的误差.我用的着担心这个软件的问题吗?或者这是我机器出了问题?

输入4楼上的应该说过了
默认的带小数点的数字会当作double来处理的
所以把double符值给float会产生类型不符
要在数字的最后加个f

至于问题一到问题三
这是由计算机内容计算转换的时候决定的
计算机先把你的数字转成二进制
然后再运算,
之后再把运算结果转成十进制
中间会有精度损失的

好象float的有效数字是7位
double的有效数字是14位
再后面的数字就无意义了

所以楼主才会看到这种情况

好久以前学的JAVA,前面3个问题没遇到过,手上机子也没装
不过我记的在定义单精度变量时末尾的f好象不能省略
也就是
float n=0.123f;