美文网首页
Java精确计算

Java精确计算

作者: 海边的蜗牛ng | 来源:发表于2018-06-17 15:50 被阅读0次

在java.math 的包中有3个class,在这我只举BigInteger的例子

BigDecimal 不可变的、任意精度的有符号十进制数。
BigInteger 不可变的任意精度的整数。
MathContext 该对象是封装上下文设置的不可变对象,它描述数字运算符的某些规则,例如由 BigDecimal 类实现的规则。

在平常我们计算的时候比如计算10+2直接定义变量赋值以后就开始计算了,整型的还好,浮点型就悲剧了,误差很大,某些领域是不允许损失精度的,如金融领域或者通信领域就不允许有误差,存钱、取钱居然操作之后和我们预期的结果相违背了700.02取了200之后居然变成了500了,那么就是不可接受的
因此就需要专门的处理这些数据
像10+2,就可以用一个对象来保存10在用另一个对象来保存2然后在调用对象的方法add(加法操作)即可得出计算值(在打印出来即10进制人类能够看懂的东西)

例子如下:

package math;

import java.math.BigInteger;

public class BigIntegerTest {
    private static BigInteger b1 = new BigInteger("12");
    private static BigInteger b2 = new BigInteger("15");
    private static BigInteger b3 = new BigInteger("3");
    public static void isAdd() {//添加
        BigInteger bigInteger = b1.add(b2);
        System.out.println("12+15 add 加法:"+bigInteger.toString());
    }
    public static void isSubtract() {//减法
        BigInteger bigInteger = b2.subtract(b1);
        System.out.println("15-12 subtract 减法:"+bigInteger.toString());
    }
    public static void isDivide() {//除法
        BigInteger b = b1.divide(b3);
        System.out.println("12/3 divide 除法:"+b.toString());
    }
    public static void isMultiply() {//乘法
        BigInteger b = b1.multiply(b2);
        System.out.println("12*15 multiply 乘法:"+b.toString());
    }
    public static void isRemainder() {//取模
        BigInteger b = b1.remainder(b2);
        System.out.println("12 % 15 remainder 取模:"+b.toString());
    }
    public static void isOr() {//或
        BigInteger b = b1.or(b2);
        System.out.println("12 | 15 or 或:"+b);
    }
    public static void isAnd() {//与
        BigInteger b = b1.and(b2);
        System.out.println("12 & 15 and 与:"+b);
    }
    public static void isShiftLeft() {//向左移动
        BigInteger b = b1.shiftLeft(2);
        System.out.println("12 移位 2个    shiftLeft:"+b);
    }
    public static void main(String[] args) {
        isAdd();
        isSubtract();
        isDivide();
        isMultiply();
        isRemainder();
        isOr();
        isAnd();
        isShiftLeft();
    }

}

打印如下:

12+15 add 加法:27 
15-12 subtract 减法:3 
12/3 divide 除法:4 
12*15 multiply 乘法:180 
12 % 15 remainder 取模:12 
12 | 15 or 或:15 
12 & 15 and 与:12 
12 移位 2个 shiftLeft:48

相关文章

  • Java精确计算

    在java.math 的包中有3个class,在这我只举BigInteger的例子 BigDecimal 不可变的...

  • BigDecimal的使用

    float、double 用于科学计算或工程计算 涉及金额的精确计算(商业计算),使用java.math.BigD...

  • BigDecimal使用(整理)

    应用场景 大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:货币 使用 ...

  • Java 浮点数精确计算

    示例代码 运行结果 是不是怀疑以上结果写错了?但是结果确实是这样的,你可以亲自运行以上代码试试。 WHY? 为什么...

  • 精确计算

    陈军每天晚上都喜欢去家附近的城中公园散散步。伴随着人到中年,陈军感觉到自己最近两年长胖了许多,特别是一个啤酒肚,许...

  • BigDecimal的用法学习

    简介: 用来对超过16位有效位的数double进行精确的运算,商业计算中要用java.math.BigDecima...

  • Java踩坑记系列之BigDecimal

    在java.math包中提供了对大数字的操作类,用于进行高精确计算,如BigInteger,BigDecimal类...

  • decimal精确计算

    关系型数据库mysql中,存储10.00这个值,若以float类型存储,是10.0,若以int类型存储,是1...

  • JS精确计算

  • iOS精确计算

    直接上代码 源码复制 #pragma mark 精确计算+ (nsdecimalnumber *)computat...

网友评论

      本文标题:Java精确计算

      本文链接:https://www.haomeiwen.com/subject/deuweftx.html