float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。
package com.jqf.www; import java.math.BigDecimal; public class test3 { public static void main(String[] args) { System.out.println(0.2+0.1);//s输出结果有误 false BigDecimal a=new BigDecimal("0.2"); BigDecimal b=new BigDecimal("0.1"); System.out.println(a.add(b));//true float d=(float) 0.1; float c=(float) 0.2; System.out.println(d+c);//true int dd=1; int tt=2; System.out.println(tt+dd);//true double d2=0.2; double d3=0.1; System.out.println(d2+d3 );//false } }
于Comparable接口其中只有一个方法——compareTo。此方法和equals有类似之处,不过它所表达的含义相比equals要更多。equals通常是比较两个值是否相等,相等返回true,不相等返回false。compareTo则约定为第1对象若“大于”第2个对象则返回整数,“等于”则返回0,“小于”则返回负数,compareTo能约定更为复杂的“比较”,例如比较两个字符串进行字典序的比较,str = “abc”, str2 = “abd”,str.equals(str2)返回false,而str.compareTo(str2)则返回正数。compareTo与equals一样同样需要遵守自反性、对称性、传递性。同样有一个强烈的建议就是compareTo应该返回和equals方法相同的结果,但如果不一致,也不是不可以,就是最好能在注释中写明两个方法返回的结果不同。
public class WorldList { public static void main(String[] args) { Set<String> s=new TreeSet<String>(); s.add("b"); s.add("a"); Collections.addAll(s,args); System.out.println(s);//[a, b] } }
public class compareTest { public static void main(String[] args) { Integer a=1; Integer b=2; System.out.println(a.compareTo(b)); } }