问题遇到的现象和发生背景
在写PTA Basic 1020 月饼,进行重写排序时发现,当排序的数据出现无限小数,与无限小数整数部分相同的数,即如4.166666666667与4.5, 2.6999999999与2.800000000000003同时存在时,重写的排序就无法比较。当整数部分不相同时,排序比较又正常。
。
public class Basic20_2 {
public static void main(String[] args) {
ArrayList<MoonCake1> list=new ArrayList<>();
list.add(new MoonCake1("3","8.1"));
list.add(new MoonCake1("3","8.4"));
list.add(new MoonCake1("10","75"));
System.out.println(list.get(0).danjia>list.get(1).danjia);
Collections.sort(list, new Comparator<MoonCake1>() {
@Override
public int compare(MoonCake1 moonCake1, MoonCake1 t1) {
if( (int)moonCake1.danjia>(int)t1.danjia){
return -1;
}
else {
return 1;
}
}
});
System.out.println(list);
}
}
class MoonCake1 {
public double kucun;
public double shoujia;
public double danjia;
public MoonCake1(String kucun, String shoujia) {
this.kucun = Double.parseDouble(kucun);
this.shoujia = Double.parseDouble(shoujia);
// double sss=this.shoujia/this.kucun;
// String str=String.format("%.2f",sss);
// danjia=Double.parseDouble(str);
danjia=this.shoujia/this.kucun;
}
@Override
public String toString() {
return "MoonCake1{" +
"kucun=" + kucun +
", shoujia=" + shoujia +
", danjia=" + danjia +
'}';
}
}
运行结果及报错内容
按照单价从大到小排序,当出现上述情况,无限小数部分整数相同,排序就无效。
无限小数整数部分不相同时,排序正常
我想要达到的结果
有没有UU解释下根本原因,优化下代码捏?