偶然间发现的一个问题,把字符串转成数值的时候有时候会不准:String data="3034.92054000007";
Float f=Float.valueOf(data);
System.out.println(f);结果如下:3034.9207另外我测试了其他的字符串与结果,如下:
0.92054000007 -----> 0.92054
1.92054000007 -----> 1.92054
34.92054000007 -----> 34.92054
134.92054000007 -----> 134.92055
334.92054000007 -----> 334.92053
1934.92054000007 -----> 1934.9205
2934.92054000007 -----> 2934.9207
3034.9205 -----> 3034.9204
3034.9201 -----> 3034.9202
3034.9202 -----> 3034.9202
3034.9203 -----> 3034.9204
3034.9204 -----> 3034.9204
3034.9205 -----> 3034.9204
3034.9206 -----> 3034.9207不知道是什么问题,请教大家!
Float f=Float.valueOf(data);
System.out.println(f);结果如下:3034.9207另外我测试了其他的字符串与结果,如下:
0.92054000007 -----> 0.92054
1.92054000007 -----> 1.92054
34.92054000007 -----> 34.92054
134.92054000007 -----> 134.92055
334.92054000007 -----> 334.92053
1934.92054000007 -----> 1934.9205
2934.92054000007 -----> 2934.9207
3034.9205 -----> 3034.9204
3034.9201 -----> 3034.9202
3034.9202 -----> 3034.9202
3034.9203 -----> 3034.9204
3034.9204 -----> 3034.9204
3034.9205 -----> 3034.9204
3034.9206 -----> 3034.9207不知道是什么问题,请教大家!
解决方案 »
- log4j简单配置~(转) 希望对大家有用 新手喔
- 能不能用反射来获取局部变量
- java 中如何把十进制数字0~15转换成对应的字符呢?
- JToggleButton这个按钮大家用过吗?我觉得好象没什么必要用到这个按钮
- 求1到2008080808之间含有数字7的个数总和?
- 这个编译问题是什么意思啊?
- 请教,如何把一个java程序转换成jar文件?
- 一个关于运行多态的基础问题
- 请问如何实现两个run方法(不好意思,暂时没分了。)
- Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException:
- 学习关于泛型和容器的问题
- 发个概念问题。
简单介绍请看:http://blog.csdn.net/justinavril/archive/2008/08/24/2823017.aspx
推荐看看。
System.out.println(Float.floatToIntBits(f)); //打印1036831949
以上程序输出int类型的数据1036831949,它对应的32位二进制数据形式为:
0 01111011 10011001100110011001101 符号位S是0,指数部分E为01111011,对应无符号整数123,位数部分的隐含位是1,因此实际的尾数是1。10011001100110011001101.以上二进制数据流对应的二进制数学运算表达式为: 110011001100110011001101*2的负27次方 110011001100110011001101对应的无符号整数为13421773,因此以上二进制数据表达式对应的十进制数据表达式为:13421773 * 2的负27次方 以上表达式的值为0.10000000149011611938765625 由此可见 在内存中 32位的二进制数科学计算法不能精确地表示0.1 所以在使用浮点数进行数学运算时 会导致一些误差