Java 中的浮点运算符和结合性
java programming java 8object oriented programming
以下程序显示,如果使用浮点变量来使用整数值,浮点运算可能会导致可疑结果。
示例
public class Tester { public static void main(String[] args) { float a = 500000000; float b = -500000000; float c = 1; float sumabc1 = a+(b+c); float sumabc2 =(a+b)+c; System.out.println("浮点运算"); System.out.println("a + ( b + c ) : " + sumabc1); System.out.println("(a + b) + c : " + sumabc2); float sumbc = b + c; float sumab = a + b; System.out.println("b + c : " + sumbc); System.out.println("a + b : " + sumab); int a1 = 500000000; int b1 = -500000000; int c1 = 1; int sumabc11 = a1+(b1+c1); int sumabc21 =(a1+b1)+c1; System.out.println("整数运算"); System.out.println("a + ( b + c ) : " + sumabc11); System.out.println("(a + b) + c : " + sumabc21); int sumbc1 = b1 + c1; int sumab1 = a1 + b1; System.out.println("b + c : " + sumbc1); System.out.println("a + b : " + sumab1); } }
输出
浮点运算 a + ( b + c ) : 0.0 (a + b) + c : 1.0 b + c : -5.0E8 a + b : 0.0 整数运算 a + ( b + c ) : 1 (a + b) + c : 1 b + c : -499999999 a + b : 0
在这里你可以看到,浮点运算中的 a + ( b + c ) 与 ( a + b ) + c 并不相同。
其背后的原因是浮点运算对结果进行了四舍五入。b + c 的结果是 -500000000 而不是 -499999999 ,而整数运算中的相同结果则会产生所需的结果。