String[] array = "0.6,,0.6,0.6".split(",", -1); float zenRotei = 0; for (int i = 0; i < array.length; i ++) {
String strTemp = array[i];
if ("".equals(array[i])) {
strTemp = "0";
}
zenRotei = zenRotei + Float.parseFloat(strTemp);
} System.out.println("zenRotei:" + zenRotei);为什么输出为1.8000001
并且为什么只有三个都是0.6的时候才有这个现象
用BigDecimal能得到1.8,但是不知道具体的原因
String strTemp = array[i];
if ("".equals(array[i])) {
strTemp = "0";
}
zenRotei = zenRotei + Float.parseFloat(strTemp);
} System.out.println("zenRotei:" + zenRotei);为什么输出为1.8000001
并且为什么只有三个都是0.6的时候才有这个现象
用BigDecimal能得到1.8,但是不知道具体的原因
解决方案 »
- 我学到JDBC了,很困惑,前辈指点一下我吧
- java关于字符的操作?我想写这两个函数,谁帮我想想,我刚学的,
- jdom中调用setAttribute(Sring key,Sring value)时,如果key中带有冒号,则报错
- 如何用程序实现保存编辑的文本
- java如何作可停靠窗口? 参与有分!!!(*江湖救急*)
- java中如何判断一个数是正整数啊
- 如何使用jdbc灵活操纵各种类型的数据库
- Jsp页中如何把中文输入正确的写到Oracle数据库中?(急)
- jdk1.4 单独运行java应用程序单独运行出现环境变量问题?问题解决马上给分!!
- 急!怎样才能获得javax.rmi包?
- 我不懂JAVA,但我知道玩电脑久了腰疼颈椎痛容易得肩周炎?
- 呵呵 把自己弄迷糊了 等待来人解决
呵呵,可以去网上搜一下,很多的。
float不是像int那样直接存在内存中。
你可以搜一下float格式
1 Bit in position 8 Bits in positions 30-23 23 Bits in positions 22-0
最终值为: (-1)^S * 2^(E-127) * (1 + M/(2^23))
附加规则:
1.若E = 0 且 M = 0,表示值为0,所以有正负两个0.
2.若E = 0 且 M <> 0,表示值为(-1)^S * 2^(E-127) * (M/(2^22)).这种值称作denormal值,VC7内存观察器查看float值,后面跟着DEN就是这个意思.
3.若E = 255 且 M = 0,则表示值为无穷大.
4.若E = 255 且 M <> 0,则表示值为Not-a-Number.若M的最高位为0,则表示值为SNaN.若M的最高位为1,则表示值为QNaN.
包括比较两个float是否相等 也不能直接用float,最好用相减 看误差多少。