BigDecimal的几种算法

Java代码  复制代码  收藏代码
  1. import java.math.BigDecimal;   

/**  

  1. * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精  
  2. * 确的浮点数运算,包括加减乘除和四舍五入。  
  3. */  
  4. public class Arith{ //默认除法运算精度   
  5. private static final int DEF_DIV_SCALE = 10; //这个类不能实例化   
  6. private Arith(){   
  7. }   
  8. /**  
  9. * 提供精确的加法运算。  
  10. * @param v1 被加数  
  11. * @param v2 加数  
  12. * @return 两个参数的和  
  13. */  
  14. public static double add(double v1,double v2){   
  15. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
  16. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
  17. return b1.add(b2).doubleValue();   
  18. }   
  19. /**  
  20. * 提供精确的减法运算。  
  21. * @param v1 被减数  
  22. * @param v2 减数  
  23. * @return 两个参数的差  
  24. */  
  25. public static double sub(double v1,double v2){   
  26. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
  27. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
  28. return b1.subtract(b2).doubleValue();   
  29. }   
  30. /**  
  31. * 提供精确的乘法运算。  
  32. * @param v1 被乘数  
  33. * @param v2 乘数  
  34. * @return 两个参数的积  
  35. */  
  36. public static double mul(double v1,double v2){   
  37. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
  38. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
  39. return b1.multiply(b2).doubleValue();   
  40. }   
  41. /**  
  42. * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到  
  43. * 小数点以后10位,以后的数字四舍五入。  
  44. * @param v1 被除数  
  45. * @param v2 除数  
  46. * @return 两个参数的商  
  47. */  
  48. public static double div(double v1,double v2){   
  49. return div(v1,v2,DEF_DIV_SCALE);   
  50. }   
  51. /**  
  52. * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指  
  53. * 定精度,以后的数字四舍五入。  
  54. * @param v1 被除数  
  55. * @param v2 除数  
  56. * @param scale 表示表示需要精确到小数点以后几位。  
  57. * @return 两个参数的商  
  58. */  
  59. public static double div(double v1,double v2,int scale){   
  60. if(scale<0){   
  61. throw new IllegalArgumentException(   
  62. "The scale must be a positive integer or zero");   
  63. }   
  64. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
  65. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
  66. return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
  67. }   
  68. /**  
  69. * 提供精确的小数位四舍五入处理。  
  70. * @param v 需要四舍五入的数字  
  71. * @param scale 小数点后保留几位  
  72. * @return 四舍五入后的结果  
  73. */  
  74. public static double round(double v,int scale){   
  75. if(scale<0){   
  76. throw new IllegalArgumentException("The scale must be a positive integer or zero");   
  77. }   
  78. BigDecimal b = new BigDecimal(Double.toString(v));   
  79. BigDecimal one = new BigDecimal("1");   
  80. return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
  81. }   
  82. }; 

转载于:https://www.cnblogs.com/JerryTomcat/p/8993994.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值