zoukankan      html  css  js  c++  java
  • BigDecimal 运算

    1. import java.math.BigDecimal;   
    2. /**  
    3. * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精  
    4. * 确的浮点数运算,包括加减乘除和四舍五入。  
    5. */  
    6. public class Arith{ //默认除法运算精度   
    7. private static final int DEF_DIV_SCALE = 10; //这个类不能实例化   
    8. private Arith(){   
    9. }   
    10. /**  
    11. * 提供精确的加法运算。  
    12. * @param v1 被加数  
    13. * @param v2 加数  
    14. * @return 两个参数的和  
    15. */  
    16. public static double add(double v1,double v2){   
    17. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
    18. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
    19. return b1.add(b2).doubleValue();   
    20. }   
    21. /**  
    22. * 提供精确的减法运算。  
    23. * @param v1 被减数  
    24. * @param v2 减数  
    25. * @return 两个参数的差  
    26. */  
    27. public static double sub(double v1,double v2){   
    28. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
    29. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
    30. return b1.subtract(b2).doubleValue();   
    31. }   
    32. /**  
    33. * 提供精确的乘法运算。  
    34. * @param v1 被乘数  
    35. * @param v2 乘数  
    36. * @return 两个参数的积  
    37. */  
    38. public static double mul(double v1,double v2){   
    39. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
    40. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
    41. return b1.multiply(b2).doubleValue();   
    42. }   
    43. /**  
    44. * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到  
    45. * 小数点以后10位,以后的数字四舍五入。  
    46. * @param v1 被除数  
    47. * @param v2 除数  
    48. * @return 两个参数的商  
    49. */  
    50. public static double div(double v1,double v2){   
    51. return div(v1,v2,DEF_DIV_SCALE);   
    52. }   
    53. /**  
    54. * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指  
    55. * 定精度,以后的数字四舍五入。  
    56. * @param v1 被除数  
    57. * @param v2 除数  
    58. * @param scale 表示表示需要精确到小数点以后几位。  
    59. * @return 两个参数的商  
    60. */  
    61. public static double div(double v1,double v2,int scale){   
    62. if(scale<0){   
    63. throw new IllegalArgumentException(   
    64. "The scale must be a positive integer or zero");   
    65. }   
    66. BigDecimal b1 = new BigDecimal(Double.toString(v1));   
    67. BigDecimal b2 = new BigDecimal(Double.toString(v2));   
    68. return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
    69. }   
    70. /**  
    71. * 提供精确的小数位四舍五入处理。  
    72. * @param v 需要四舍五入的数字  
    73. * @param scale 小数点后保留几位  
    74. * @return 四舍五入后的结果  
    75. */  
    76. public static double round(double v,int scale){   
    77. if(scale<0){   
    78. throw new IllegalArgumentException("The scale must be a positive integer or zero");   
    79. }   
    80. BigDecimal b = new BigDecimal(Double.toString(v));   
    81. BigDecimal one = new BigDecimal("1");   
    82. return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
    83. }   
    84. };  
  • 相关阅读:
    2014 非常好用的开源 Android 测试工具
    Android 开发最佳实践
    Java_综合案例DAO设计模式(重要)
    Java_Set接口
    Java_List
    Java_类集框架简介
    Java_对象序列化
    Java_打印流
    Java_IO编程
    Java_文件操作
  • 原文地址:https://www.cnblogs.com/523823-wu/p/8658249.html
Copyright © 2011-2022 走看看