作者:不要哭啦
发布时间:2016-11-21T16:18:57
不要使用 i % 2 == 1 来判断是否是奇数,因为i为负奇数时不成立,请使用 i % 2 != 0 来判断是否是奇数,或使用
高效式 (i & 1) != 0来判断。
System.out.println(2.00 - 1.10 ); // 0.8999999999999999
解决方案1:
System.out.println(new BigDecimal("2.0" ).subtract(new BigDecimal("1.10" ))); // 0.9
一定要用BigDecimal(String)构造器,而千万不要用BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String) 来构造,因为在将float或double转换成String时精度已丢失)。
另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。 解决方案2:
System.out.println(200 - 110); // 90
final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000; // 正确结果应为:86400000000 实际结果为500654080
24 * 60 * 60 * 1000 这个时候是int类型,当再次乘以1000的时候就会超过int的最大范围-2147483648--2147483647,因此结果错误
解决方案:
final long MICROS_PER_DAY = 24L * 60 * 60 * 1000 * 1000; // 把int类型转换成Long计算就行了
char x = 'X' ;
int i = 0 ;
System.out.println(true ? x : 0 );// X
System.out.println(false ? i : x);// 88
1.如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。 果一个操作的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的“字面常量”,并且 2.它的值可以用类型T表示,那条件表达式的类型就是T。 3.否则,将对操作数类型进行提升,而条件表达式的类型就是第二个和第三个操作被提升之后的类型