标签:BigDecimal System println new public out
先看遇到的问题:
package lesson2;
public class Demo05 {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2);
//面试题
double result = (1.4-0.5)/0.9;
System.out.println(result);
}
}
为什么会出现上面的情况呢?
简单点说就是,计算机在存储浮点数字时以二进制方法存储,在进行转化为二进制时存储的小数部分出现部分数据丢失,而成为近似值,从而导致在计算时出现错误。
详细可参考:Java中浮点数运算不准确的原因
为解决此类问题而引入BigDecimal类
常用方法
构造方法
BigDecimal类的构造方法挺多的,但这里只介绍一种public BigDecimal(String val)
,将字符串表示形式转换为BigDecimal。注意这里一定是字符串String,如果在参数为小数时,使用double类型时,会出现一定的问题(注意看实例)。
普通方法
BigDecimal创建的是对象,所以在运算的时候不能再使用+-*/
等算术运算符进行直接运算,而是使用相应的方法。
方法 | 描述 |
---|---|
public BigDecimal add(BigDecimal augend) | 加法 |
public BigDecimal subtract(BigDecimal subtrahend) | 减法 |
public BigDecimal multiply(BigDecimal multiplicand) | 乘法 |
public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode) | 除法。divisor - 此 BigDecimal 要除以的值。scale - 要返回的 BigDecimal 商的标度。roundingMode - 要应用的舍入模式。 |
这里需要注意的是,在进行除法运算时,如果结果为除不尽的数,未标明保留几位小数(或使用舍入的方式),会抛出的异常:
常用的四舍五入的方法:
常量 | 描述 |
---|---|
ROUND_HALF_UP | 四舍五入 |
ROUND_UP | 直接进位 |
ROUND_DOWN | 直接舍弃 |
ROUND_HALF_DOWN | 舍弃部分>0.5进位,否则舍弃 |
实例
package lesson2;
import java.math.BigDecimal;
public class Demo05 {
public static void main(String[] args) {
//BigDecimal,大的浮点数
System.out.println("======减法======");
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
BigDecimal r1=bd1.subtract(bd2);
System.out.println(r1);
System.out.println("=====加法=====");
BigDecimal r2=bd1.add(bd2);
System.out.println(r2);
System.out.println("======乘法======");
BigDecimal r3=bd1.multiply(bd2);
System.out.println(r3);
System.out.println("======除法======");
BigDecimal r4 = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r4);
BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
//10除以3的结果四舍五入,保留两位小数
System.out.println(r5);
}
}
标签:BigDecimal,System,println,new,public,out 来源: https://www.cnblogs.com/zypdbk/p/16644558.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。