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)
谁能帮我解释一下,先谢了!
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)
谁能帮我解释一下,先谢了!
换成 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));
}
}
原因:因为赋值给float变量时,所赋值默认为double类型常量,double比float范围大,故必须使用f予以区别。另外,float和double数据是依照IEEE754浮点数存储规则存储的,这种方法不能精确的表示数值。
换成 BigDecimal就不会出现这种情况了。