货币运算
public class DoubleTest {
public static void main(String[] args) {
System.out.println(2.00 - 1.10);
}
}0.8999999999999999
Process finished with exit code 0int
BigDecimal
Last updated
public class DoubleTest {
public static void main(String[] args) {
System.out.println(2.00 - 1.10);
}
}0.8999999999999999
Process finished with exit code 0Last updated
public class MoneyOperation {
private static final int DEF_DIV_SCALE = 10;
private static final String DEF_PATTERN = "0.00";
private MoneyOperation() {}
public static double add(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();
}
public static double sub(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
}
public static double mul(double d1, double d2) {
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.multiply(b2).doubleValue();
}
public static double div(double d1, double d2) {
return div(d1, d2, DEF_DIV_SCALE);
}
public static double div(double d1, double d2, int scale) {
if (scale < 0)
throw new IllegalArgumentException("The scale must be a positive integer or zero");
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static String format(double d) {
return return format(d, DEF_PATTERN);
}
public static String format(double d, String pattern) {
return new DecimalFormat(pattern).format(d);
}
}public static void main(String[] args) {
System.out.println(MoneyOperation.sub(2, 1.1));
}0.9
Process finished with exit code 0System.out.println(MoneyOperation.format(MoneyOperation.sub(2, 1.1)));