问题描述
double aa=50.44;double bb=aa-50;System.out.println(bb); //0.4399999999999977类似上面的小数的减法,我想做到,绝对无误差,如何才能实现?
解决方案
public static double sub(double v1, double v2) {BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.subtract(b2).doubleValue();}public static void main(String[] args) {double aa=50.44; double bb = sub(aa, 50);System.out.println(bb);}
解决方案二:
BigDecimal 正解!~
解决方案三:
约定保存多少位,注意四舍五入,提升至int 然后 除/多少位 得到最终结果!
解决方案四:
double的存储空间有限,本来就是有误差的,不管你怎么玩,总是无法避免,除非你用BigDecimal.
时间: 2024-09-14 16:57:08