public class Rule {
         public static void main(String[] args) {
                float x=2.35f,y=2.92,z=9.35;
                
                System.out.println(100*x);
                System.out.println(100*y);
                System.out.println(100*z);
         }
}
运行结果如下:
init:
deps-jar:
compile-single:
run-single:
234.99998
292.0
935.00006
BUILD SUCCESSFUL (total time: 0 seconds)
谁能帮我解释一下,先谢了!

解决方案 »

  1.   

    float和double的精度不高,容易造成这种情况
    换成 BigDecimal就不会出现这种情况了。import java.math.BigDecimal;public class Rule
    {
        public static void main(String[] args)
        {
            BigDecimal x = new BigDecimal("2.35");
            BigDecimal y = new BigDecimal("2.92");
            BigDecimal z = new BigDecimal("9.35");
            System.out.println(x.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN));
            System.out.println(y.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN));
            System.out.println(z.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN));
        }
    }
      

  2.   

    float变量所赋值必须在末尾加上f。
    原因:因为赋值给float变量时,所赋值默认为double类型常量,double比float范围大,故必须使用f予以区别。另外,float和double数据是依照IEEE754浮点数存储规则存储的,这种方法不能精确的表示数值。
      

  3.   

    float和double的精度不高,容易造成这种情况 
    换成 BigDecimal就不会出现这种情况了。