• BigDecimal相关——高精度数的处理


    java.math.BigDecmal.(java.math.BigInteger)

    从MySQL数据库中读取出decimal(4,2)类型的数据进行累加统计时,会出现精度问题。

    对于在java中处理数字运算,如果涉及到小数点后多位运算,则会出现精度问题。

    比如:

      190.3在加法中就会变成190.29999994这样的异常精度数。

    这是因为float与double类型本身就是不准确。只能用来做科学计算或工程计算。在商业计算中我们要用BigDecimal。

    BigDecimal一共有4个构造方法,其中两个是:

    BigDecimal(double val); Translates a double into a BigDecimal.

    BigDecimal(String val); Translates the String repre sentation of a BigDecimal into a BigDecimal.

    如果我们需要精确计算,要用String来构造BigDecimal。

    可以自己写一个工具类  Arith()  ——摘抄自新浪blogs。

     1 /**
     2  * 
     3  */
     4 package com.clarion.worksys.util;
     5 
     6 import java.math.BigDecimal;
     7 
     8 /**
     9  * @author weng_zhangchu
    10  *
    11  */
    12 public final class Arith {// 这个类不能实例化
    13      
    14      private static final int DEF_DIV_SCALE = 2;
    15      // 默认除法运算精度
    16      private Arith() {
    17      }
    18      
    19      public static double add(double v1, double v2) {
    20       BigDecimal b1 = new BigDecimal(Double.toString(v1));
    21       BigDecimal b2 = new BigDecimal(Double.toString(v2));
    22       return b1.add(b2).doubleValue();
    23      }
    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      public static double mul(double v1, double v2) {
    32       BigDecimal b1 = new BigDecimal(Double.toString(v1));
    33       BigDecimal b2 = new BigDecimal(Double.toString(v2));
    34       return b1.multiply(b2).doubleValue();
    35      }
    36      
    37      public static double div(double v1, double v2) {
    38       return div(v1, v2, DEF_DIV_SCALE);
    39      }
    40      
    41      public static double div(double v1, double v2, int scale) {
    42       if (scale < 0) {
    43        throw new IllegalArgumentException(
    44        "The scale must be a positive integer or zero");
    45       }
    46       BigDecimal b1 = new BigDecimal(Double.toString(v1));
    47       BigDecimal b2 = new BigDecimal(Double.toString(v2));
    48       return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    49      }
    50      
    51      public static double round(double v, int scale) {
    52       if (scale < 0) {
    53        throw new IllegalArgumentException(
    54        "The scale must be a positive integer or zero");
    55       }
    56       BigDecimal b = new BigDecimal(Double.toString(v));
    57       BigDecimal one = new BigDecimal("1");
    58       return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    59      }
    60 }


  • 相关阅读:
    flask之Blueprint蓝图
    flask之Flask、config配置
    flask之路由route
    flask之request
    flask之response
    pyhton中的深浅copy
    jQuery选择器
    Html常用标签
    python中的字典dict
    python基础知识
  • 原文地址:https://www.cnblogs.com/sevenology/p/3022407.html
Copyright © 2020-2023  润新知