内容简介:由于在运算的时候,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)是一个整数的最小值。
笔记:
- 这个构造函数的结果可能有些不可预测 。 可以假设在Java中写入new BigDecimal(0.1)创建一个BigDecimal ,它完全等于0.1(非标尺值为1,比例为1),但实际上等于0.1000000000000000055511151231257827021181583404541015625。 这是因为0.1不能像double (或者作为任何有限长度的二进制分数)精确地表示。 因此,正在被传递给构造的值不是正好等于0.1,虽然表面上。
- 该String构造,在另一方面,是完全可以预测的:写new BigDecimal("0.1")创建BigDecimal这正好等于0.1,正如人们所期望的那样。 因此, 一 般建议使用String constructor优先于此。
- 当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类(入门)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 关于Jackson默认丢失Bigdecimal精度问题分析
- Java 浮点型(Double,Float)精度丢失解决方案
- JS大坑之19位数的Number型精度丢失问题
- Jison解决JS处理后端返回的Long型数据精度丢失问题
- swagger-bootstrap-ui 1.9.6 发布,解决长整型精度丢失的问题
- JS计算精度小记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。