拯救你丢失的精度——BigInteger和BigDecimal类(入门)

栏目: Java · 发布时间: 5年前

内容简介:由于在运算的时候,float类型和double很容易丢失精度(下例为演示),所以为了能精确的表示、计算浮点数,Java提供了BigDecimal我们来帖一组说明构造方法:建议使用 →

第三阶段 JAVA 常见对象的学习

BigInteger和BigDecimal类

BigInteger类

(一) 构造方法:

//针对超过整数范围的运算(整数最大值:2147483647)
BigInteger(String val)

(二) 常用方法:

//加
public BigInteger add(BigInteger val)
//减
public BigInteger subtract(BigInteger val)
//乘
public BigInteger multiply(BigInteger val)
//除
public BigInteger divide(BigInteger val)
//返回商和余数的数组
public BigInteger[] divideAndRemainder(BigInteger val)
import java.math.BigInteger;

public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger bi1 = new BigInteger("100");
        BigInteger bi2 = new BigInteger("50");

        BigInteger[] bis = bi1.divideAndRemainder(bi2);
        System.out.println("商:" + bis[0]);
        System.out.println("余数:" + bis[1]);
    }
}

//运行结果
商:2
余数:0

BigInteger类

由于在运算的时候,float类型和double很容易丢失精度(下例为演示),所以为了能精确的表示、计算浮点数,Java提供了BigDecimal

public class BigDecimalDemo {
    public static void main(String[] args) {
        System.out.println(0.09 + 0.01);
        System.out.println(1.0 - 0.32);
        System.out.println(1.026 * 100);
        System.out.println(1.502 / 100);
        System.out.println(1.0 - 0.17);
    }
}

//运行结果
0.09999999999999999
0.6799999999999999
102.60000000000001
0.01502
0.83

(一) 构造方法:

我们来帖一组说明

BigDecimal

public BigDecimal(double val)

将double转换为BigDecimal ,这是double的二进制浮点值的精确十进制表示。

返回的BigDecimal是(10scale × val)是一个整数的最小值。

笔记:

  1. 这个构造函数的结果可能有些不可预测 。 可以假设在Java中写入new BigDecimal(0.1)创建一个BigDecimal ,它完全等于0.1(非标尺值为1,比例为1),但实际上等于0.1000000000000000055511151231257827021181583404541015625。 这是因为0.1不能像double (或者作为任何有限长度的二进制分数)精确地表示。 因此,正在被传递给构造的值不是正好等于0.1,虽然表面上。
  2. 该String构造,在另一方面,是完全可以预测的:写new BigDecimal("0.1")创建BigDecimal这正好等于0.1,正如人们所期望的那样。 因此, 一 般建议使用String constructor优先于此。
  3. 当double必须用作源为BigDecimal ,注意,此构造提供了一个精确的转换; 它不会将double转换为String使用Double.toString(double)方法,然后使用BigDecimal(String)构造函数相同的结果。 要获得该结果,请使用static valueOf(double)方法。
  • 参数

    val - double值转换为 BigDecimal 。

  • 异常

    NumberFormatException - 如果 val 是无限或NaN。

构造方法:建议使用 → BigDecimal(String s)

(二) 常用方法:

import java.math.BigDecimal;

public class BigDecimalDemo2 {
    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("0.09");
        BigDecimal bd2 = new BigDecimal("0.01");
        System.out.println("加:" + bd1.add(bd2));

        BigDecimal bd3 = new BigDecimal("1.0");
        BigDecimal bd4 = new BigDecimal("0.32");
        System.out.println("减:" + bd3.subtract(bd4));

        BigDecimal bd5 = new BigDecimal("1.026");
        BigDecimal bd6 = new BigDecimal("100");
        System.out.println("乘:" + bd5.multiply(bd6));

        BigDecimal bd7 = new BigDecimal("1.502");
        BigDecimal bd8 = new BigDecimal("100");
        System.out.println("除:" + bd7.divide(bd8));
    }
}

//运行结果
加:0.10
减:0.68
乘:102.600
除:0.01502

结尾:

如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^

如果能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)

一个坚持推送原创Java技术的公众号:理想二旬不止

拯救你丢失的精度——BigInteger和BigDecimal类(入门)


以上所述就是小编给大家介绍的《拯救你丢失的精度——BigInteger和BigDecimal类(入门)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

淘宝十年产品事

淘宝十年产品事

苏杰 / 电子工业出版社 / 2013-10-15 / 55.00

产品经理发展到一定阶段,再要成长,光靠学习一些知识、技能已经不够,必须通过经典案例来学习,而本书,就提供了小到页面细节、大到平台架构的丰富案例。电商从业者,无法无视“淘宝”这个标杆的存在,本书可帮助大家做出更好的选择。愿意思考的人们,也可以从“淘宝”这个产品,或者说社会 现象、经济现象里,找到每天都能体会到的那些变化的原因,从而想得更明白,活得更通透。 本书细数淘宝成立十年来经历的重大变化,......一起来看看 《淘宝十年产品事》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具