黑马程序员技术交流社区

标题: 数的精度问题 [打印本页]

作者: 郑世光    时间: 2012-9-8 13:21
标题: 数的精度问题
解释下程序的输出结果:2.0...2.37

class XiaoShu
{
        public static void main(String[] args)
        {
                float f=2.365f;
                float b=Math.round(f*100)/100;
                float d=(float)Math.round(f*100)/100;   //1,加了float为什么就是2.37了?  2,这里的float转换的是Math.round(f*100)还是Math.round(f*100)/100
                System.out.println(b+"..."+d);
        }
}

作者: 彭润生    时间: 2012-9-8 13:49
沙发。。。
作者: AngieFans85    时间: 2012-9-8 14:02
"1,加了float为什么就是2.37了?"

因为Math.round(f*100)返回的一个int型数据.
而(float)Math.round(f*100)是将int型强转为float型数据
(float)Math.round(f*100)/100是将float型数据除以一个int型数据,float的精度大于int的精度,最终结果当然是返回较大的那个类型的数据,即float型数据.



"2,这里的float转换的是Math.round(f*100)还是Math.round(f*100)/100"

强转的优先级大于算术运算的优先级,所以这里转换的是Math.round(f*100)哦.
作者: 陈俊来    时间: 2012-9-9 16:38
float d=(float)Math.round(f*100)/100;
首先Math.round()是将值舍入至最接近的整数或是指定的小数位数数字
所以Math.round(f*100)就是237.0
(float)Math.round(f*100)/100;
强制转换将int类型转换为float所以就是2.37





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