zoukankan      html  css  js  c++  java
  • Java中的高精度整数和高精度小数

    在实际编码中,会遇到很多高精度的事例,比如,在计算金钱的时候就需要保留高精度小数,这样计算才不会有太大误差:

    在下面的代码中,我们验证了,当两个float型的数字相加,得到的结果和我们的预期结果是有误差的,为了减小和防止这种误差的出现,我们需要使用BigInteger类和BigDecimal类来计算。

    package com.ietree.base.number;
    
    import java.math.BigDecimal;
    import java.math.BigInteger;
    
    public class BigIntegerTest {
    
        public static void main(String[] args) {
            float f1 = 123.01f + 2.01f;
            // 预期输出:125.02,实际输出:125.020004
            System.out.println(f1);
            // 预期输出:125.02,实际输出:125.02000000000001
            System.out.println(123.01 + 2.01);
            System.out.println("===============================");
    
            // 高精度整数测试
            BigInteger bint1 = new BigInteger("125");
            BigInteger bint2 = new BigInteger("999");
            BigInteger tmp;
            // 相加
            tmp = bint1.add(bint2);
            System.out.println("bint1 + bint2 = " + tmp);
            // 相减
            tmp = bint2.subtract(bint1);
            System.out.println("bint2 - bint1 = " + tmp);
            // 相乘
            tmp = bint1.multiply(bint2);
            System.out.println("bint1 * bint2 = " + tmp);
            // 相除
            tmp = bint2.divide(bint1);
            System.out.println("bint2 / bint1 = " + tmp);
            // 求余数
            tmp = bint2.remainder(bint1);
            System.out.println("bint2 % bint1 = " + tmp);
            // 求次方
            tmp = bint2.pow(2);
            System.out.println("bint2的二次方 = " + tmp);
            System.out.println("======================================");
    
            // 高精度小数测试
            BigDecimal bd1 = new BigDecimal(123.01);
            BigDecimal bd2 = new BigDecimal(2.01);
            BigDecimal bd;
            // 相加
            bd = bd1.add(bd2);
            System.out.println("bd1 + bd2 = " + bd);
            // 相减
            bd = bd1.subtract(bd2);
            System.out.println("bd2 - bd1 = " + bd);
            // 相乘
            bd = bd1.multiply(bd2);
            System.out.println("bd1 * bd2 = " + bd);
            // 相除
            // bd = bd1.divide(bd2);
            bd = bd1.divide(new BigDecimal(2.0));
            System.out.println("bd1 / 2.0 = " + bd);
            // 求余数
            bd = bd1.remainder(bd2);
            System.out.println("bd2 % bd1 = " + bd);
            // 求次方
            bd = bd1.pow(3);
            System.out.println("bd2的三次方 = " + bd);
            System.out.println("======================================");
    
            // 四舍五入保留小数位数
            BigDecimal bd3 = new BigDecimal(123.01).setScale(5,5);
            System.out.println("bd3 = " + bd3);
        }
    }
  • 相关阅读:
    WRF WPS预处理
    CVS安装
    Linux窗口最小化消失,任务栏上无法找到的解决方法
    NCARG安装配置出现error while loading shared libraries: libg2c.so.0问题额解决办法
    Netcdf安装
    Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
    The leaflet package for online mapping in R(转)
    Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
    What does a Bayes factor feel like?(转)
    Weka算法介绍
  • 原文地址:https://www.cnblogs.com/Dylansuns/p/7355877.html
Copyright © 2011-2022 走看看