public class Test
{
public static void main(String[] args)
{
float a = 0.083f;
System.out.println("a = " + a);
System.out.println("a*100 = " + a*100);
float b = 0.084f;
System.out.println("b = " + b);
System.out.println("b*100 = " + b*100);
}
}大家看看结果是什么?
解决方案 »
- 求高手讲解用super调用父类构造器的程序在内存中执行的过程,并解释如下的程序执行过程。
- 对象数组的转换
- 关于Runtime的东东。请教。
- 利用JAVA语言编写的计算器,怎么实现连续运算功能?
- Java进度条有关线程调度的问题,请熟悉多线程编程的朋友进来看看
- java applet怎么与 host:aarondai,port:345的计算机上C#写的监听程序通信?
- 一个基本的问题?
- 如何才能正确的编译Hello.Java
- 运行java程序,系统经常出现以下错误,请问是什么原因?高手指教!
- 请问为什么JComboBox不能显示下列列表,而只能用键盘上下翻看
- java多维数组的问题
- 字符串的截取问题2
a*100 = 8.299999
b = 0.084
b*100 = 8.4不足为怪,float型就是不精确的小数
你试试class Test {
public static void main(String[] args) {
float f=1.05f;
System.out.println(100*f);
}
}
浮点型永远不会精确
public static void main(String args[]) throws Exception {
float a = 0.083f;
System.out.printf("a = %12.9f\n" , a);
System.out.printf("a*100 = %12.9f\n" , a*100);
float b = 0.084f;
System.out.printf("b = %12.9f\n", b);
System.out.printf("b*100 = %12.9f\n" ,b*100);
}输出如下:
F:\java>java Test
a = 0.082999997
a*100 = 8.299999237
b = 0.083999999
b*100 = 8.399999619如果有效数字少,四舍五入之后,后面全是0,就不输出了,所以输出是0.083之类的你以为是精确的了,其实不然。也不是所有的浮点数都没有办法精确表示。应该是不能精确转为二进制小数的浮点数,没有办法精确表示。
比如0.5、0.25、0.125、0.0625...(分别是2^-1、2^-2、2^-3...)等之类的小数(以及由它们的和组成的小数,如0.75)是可以精确表示的。
float a = 0.083f;
System.out.println("a = " + a);
System.out.println("a*100 = " + a*100);把其的System.out.println("a*100 = " + a*100);改成
System.out.println("a*100 = " + a*1000/10);居然结果又变成8.3了(java下)但C#下却不会。