黑马程序员技术交流社区

标题: 有关浮点数的一个问题 [打印本页]

作者: 王松朝    时间: 2011-7-20 13:20
标题: 有关浮点数的一个问题
System.out.println((float)3.141500349);的打印结果居然是3.1415002
之前用别的小数测试的时候都挺好的,虽然也不是原来的数,但之前都是按最后一位四舍五入变化的,怎么这个倒变小了?
作者: 匿名    时间: 2011-7-20 13:32
这是一个float精度的问题,println打印时,java将float装成String,在转换的时候会进行一个精度的截断。
这个和计算机组成原理的知识有关,和二进制的存储方式有关,float有效存储位是23位,超出的就会被截断。
作者: 匿名    时间: 2011-7-20 13:35
float 精度还是有误差啊 用double吧
作者: 琚臻臻    时间: 2011-7-20 13:44
原帖由 lihaihan 于 2011-07-20 13:35 发表 float 精度还是有误差啊 用double吧


double也容易丢精度呀!用BigDecimal类吧!
BigDecimal b1 = new BigDecimal ("0.022222 ");不过要注意,创建对象时候,一定要用String对象作为构造参数,如果用double类型,依然会丢失数据。
作者: 匿名    时间: 2011-7-20 13:50
标题: 回复 板凳 的帖子
受教了,多谢 琚臻臻 老大!
作者: 匿名    时间: 2011-7-20 16:26
计算机不能识别除二进制数据以外的任何数据,精度很高的浮点数在编译成二进制时出现偏差,输出时并没有进行四舍五入。float和double只能用作科学计算或者工程计算,在商业计算等精确计算中就要用math.BigDecimal进行处理了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2