1 /** 2 * 相除 3 * @param double1 4 * @param double2 5 * @param scale 除不尽时指定精度 6 * @return 7 */ 8 public static double div(String doubleValA, String doubleValB, int scale) { 9 BigDecimal a2 = new BigDecimal(doubleValA); 10 BigDecimal b2 = new BigDecimal(doubleValB); 11 return a2.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); 12 }
5. 主函数调用
1 public static void main(String[] args) { 2 String doubleValA = "3.14159267"; 3 String doubleValB = "2.358"; 4 System.out.println("add:" + add(doubleValA, doubleValB)); 5 System.out.println("sub:" + sub(doubleValA, doubleValB)); 6 System.out.println("mul:" + mul(doubleValA, doubleValB)); 7 System.out.println("div:" + div(doubleValA, doubleValB, 8)); 8 }
结果展示如下所示:
add:5.49959267
sub:0.78359267
mul:7.40787551586
div:1.33231241
所以最好的方法是完全抛弃double,用string和java.math.BigDecimal。
java遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。具体底层如何存储以及如何进行运行请继续关注我的博客,后续我会将详情总结好的。