内容简介:由于在运算的时候,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计算精度小记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Intersectional Internet
Safiya Umoja Noble、Brendesha M. Tynes / Peter Lang Publishing / 2016
From race, sex, class, and culture, the multidisciplinary field of Internet studies needs theoretical and methodological approaches that allow us to question the organization of social relations that ......一起来看看 《The Intersectional Internet》 这本书的介绍吧!