java中涉及到浮点计算,就会有误差,
float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal
public class MoneyTest{ public static void main(String[] args) { System.out.println(2.00 - 1.10);// 0.8999999999999999 System.out.println(2.00D - 1.10D);// 0.8999999999999999 System.out.println(2.00F - 1.10F);// 0.9 System.out.println(Double.toString(2.00D));// 2.0 System.out.println(BigDecimal.valueOf(2.00).subtract(BigDecimal.valueOf(1.10)));// 0.9 System.out.println(BigDecimal.valueOf(2.00F).subtract(BigDecimal.valueOf(1.10F)));// 0.899999976158142 System.out.println(BigDecimal.valueOf(2.00D).subtract(BigDecimal.valueOf(1.10D)));// 0.9 System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));// 0.90 } }
在这里,我介绍一种方便计算的方式:将单位 : 元 -> 分
这时,计算时 都是整型在参与计算,大大减少使用BigDecimal计算时带来的麻烦。
/*** 将元变成分 如 0.01元 变成 1分* * @param str* 金额(元)* @return*/public static String moneyYuanToFen(String str) {
Double num = Double.parseDouble(str);
int result = (int) (num * 100);
return String.valueOf(result);
}/*** 将分变成元 100分 -> 1元* * @param amount* 金额(分)* @return*/public static String moneyFenToYuan(Long amount) {return new BigDecimal(amount).divide(new BigDecimal(100)).setScale(2).toString();}