zoukankan      html  css  js  c++  java
  • int变量与double变量混合运算时的常见问题及方法

    int变量与double变量混合运算时的常见问题及方法

     

    int变量与double变量混合运算时的常见问题及方法

    例:

    例:

    很明显这都不是我们需要的答案,原因:

    1)由于计算机内部以二进制保存,所以十进制的有限位的小数,在计算机内部会是一个无限位的小数。
    例如 十进制的0.9虽然只有一位小数,转成2进制是无限循环小数0.1110011001100110011...

    2)计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,double 可以保留十进制15~16位(二进制52位)有效数字。那有效数字以后的就被忽略了。
    例如上面的0.9的表示受精度所限,精度以后的就被忽略了,这样
    float时,它是0.89999998
    double时,它是0.90000000000000002

    解决办法:用Java提供给我们的一个内置类java.math.BigDecimal,来精确计算。

    下面是这个工具类的使用方法:

    1 public class Arith {
    2 /**
    3 * 提供精确加法计算的add方法
    4 * @param value1 被加数
    5 * @param value2 加数
    6 * @return 两个参数的和
    7 */
    8 public static double add(double value1,double value2){
    9 BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
    10 BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
    11 return b1.add(b2).doubleValue();
    12 }
    13
    14 /**
    15 * 提供精确减法运算的sub方法
    16 * @param value1 被减数
    17 * @param value2 减数
    18 * @return 两个参数的差
    19 */
    20 public static double sub(double value1,double value2){
    21 BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
    22 BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
    23 return b1.subtract(b2).doubleValue();
    24 }
    25
    26 /**
    27 * 提供精确乘法运算的mul方法
    28 * @param value1 被乘数
    29 * @param value2 乘数
    30 * @return 两个参数的积
    31 */
    32 public static double mul(double value1,double value2){
    33 BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
    34 BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
    35 return b1.multiply(b2).doubleValue();
    36 }
    37
    38 /**
    39 * 提供精确的除法运算方法div
    40 * @param value1 被除数
    41 * @param value2 除数
    42 * @param scale 精确范围
    43 * @return 两个参数的商
    44 * @throws IllegalAccessException
    45 */
    46 public static double div(double value1,double value2,int scale) throws IllegalAccessException{
    47 //如果精确范围小于0,抛出异常信息
    48 if(scale<0){
    49 throw new IllegalAccessException("精确度不能小于0");
    50 }
    51 BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
    52 BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
    53 return b1.divide(b2, scale).doubleValue();

     

     

  • 相关阅读:
    Django_环境配置(一)
    python 使用sub替换时报错“re.error: bad escape P”或 “SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes”
    python 获取异常全部信息
    Flink入门 构建一个应用
    Flink入门 本地环境搭建
    mysql数据库 使用分析工具 进行慢查询分析
    Windows环境下搭建 【ElasticSearch】
    SpringBoot 事务的控制
    spring boot 数据库事务检查
    利用jenkins一键部署项目
  • 原文地址:https://www.cnblogs.com/fgy11/p/12782434.html
Copyright © 2011-2022 走看看