Java中涉及到金钱计算方法

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();
	}



猜你喜欢

转载自blog.csdn.net/oliveraaaaaa/article/details/79230979