public class Test {
public static void main(String[] args) {
double i = 23;
double j = 56.21;
double x = 3;
double y = 3.21;
System.out.println(i + j);
System.out.println(x + y);
}
}运行结果:
79.21000000000001
6.21
public static void main(String[] args) {
double i = 23;
double j = 56.21;
double x = 3;
double y = 3.21;
System.out.println(i + j);
System.out.println(x + y);
}
}运行结果:
79.21000000000001
6.21
解决方案 »
- 特别急!!求助!!!这样的访问如何实现??(jsp+servlet)
- [socket]监听的问题
- java的 Math 函数
- 怎么让getProperties不自动去空格??
- 请各位给我推荐一下java入门的书
- 使用swt的java程序运行错误,请高手帮忙(大家可以来看看,一起学习)
- Java中如何解决Chart的问题???
- jdk1.4 怎么设置环境变量啊,我不知道要制定安装目录下哪几个文件 ?
- socket传输二进制文件输出是不是要用DataOutputStream?
- P2 350的cpu,最大限度支持多少线程?
- 为什么我在MANIFEST指定了Class-Path但还是报找不到类啊?
- ServerSocket和Socket的问题
楼主【adrain_sengtang】截止到2008-07-26 09:46:45的历史汇总数据(不包括此帖):
发帖的总数量:8 发帖的总分数:220 每贴平均分数:27
回帖的总数量:13 得分贴总数量:1 回帖的得分率:7%
结贴的总数量:8 结贴的总分数:220
无满意结贴数:1 无满意结贴分:20
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:12.50 % 无满意结分率:9.09 %
敬礼!
public static void main(String[] args) {
double i = 23.0;
double j = 56.21;
double x = 3.0;
double y = 3.21;
System.out.println(i + j);
System.out.println(x + y);
}
}
运行结果:79.21000000000001
6.21
以上代码都是 double类型的, 也是运行结果不 对,不是类型转换的原因
何止java是这样的呢;其他语言也是 不能精确计算小数的
他们的二进制存储方式:1.float:
SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM一位表示符号,8位表示指数(底数为2),用23位来表示参数2.double:
SEEEEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM一位表示符号,11位表示指数(底数为2),用52位来表示参数举个例子:float 类型的数字0.1的二进制数据形式:float f = 0.1F;
System.out.println(Float.floatToIntBits(f));//打印1036831949以上程序输出int类型的数据1036831949,它对应的32位二进制数据形式:
0 01111011 10011001100110011001101所以符号位S是0,指数部分E为01111011,对应无符号整数123,尾数部分的隐含为是1,因此实际的尾数是1.10011001100110011001101以上二进制数据流对应的二进制数学运算表达式为:
(-1)^0*2^(123-127)*1.10011001100110011001101
即:
110011001100110011001101*2^-27
表达式对应的十进制数据表达式:
13421773*2^-27所以,表达式的值为:
0.100000001490116119384765625可见,在内存中,32 为的二进制数科学计数法不能准确地表示0.1。他的误差为0.000000001490116119384765625double 采用64位精度要高,误差为:0.00000000000001