用来计算数据量大的类&能精确控制小数的类----BigDecimal
2018-02-08 09:36
561 查看
首先先来了解一下BigDecimal类的继承关系:1.它属于java.math包。
2.继承关系:
java.lang.Object
|--java.lang.Number
|-- java.math.BigDecimal
3.所有已实现的接口:
Serializable,Comparable<BigDecimal>
需要记住:BigDecimal是Number的子类,其中Number是一个抽象类,为BigDecimal的格式转换功能提供了方法。
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。因为本人也比较菜,做此文章只是为了熟记一下BigDecimal的精确小数功能,所以讲什么随心了...
与BigInteger一样,BigDecimal拥有基本的数学运算方法,方法名都是像add、divide什么的,普遍好理解的名字,只要在开发工具(像eclipse等带有提示功能的)中输入就能有提示。 在这主要说的就是舍入的方法了,因为BigDecimal是通过除法来进行舍入的,所以要熟记下面这个方法:
public BigDecimal divide(BigDecimal divisor,
int scale,
int roundingMode)其参数:
divisor 是表示被除数。若只进行四舍五入可让divisor=1
scale 是表示结果保留小数位数
roundingMode 是表示要应用的舍入模式
其中舍入模式有:(注这些舍入模式都为BigDecimal类的静态final方法)
public static final intROUND_HALF_UP :最常用的四舍五入模式
public static final intROUND_HALF_DOWN :五舍六入模式
[b]public static final int ROUND_UP:全部进一位
[/b]
public static final intROUND_DOWN: 直接全部舍去
等等,还有一些模式我至今没有遇到过,也就不提了
拿最普遍的四舍五入举例:
import java.math.BigDecimal;
public class H {
/**
* 实现准确的四舍五入
* @param num 需要进行四舍五入的数字
* @param scale 要保留的小数位
* @return 返回四舍五入后的数据
*/
public static double f(double num,int scale) {
//将double型数据转换为BigDecimal型
//其中num1为除数,num2为被除数
BigDecimal num1 = new BigDecimal(num);
BigDecimal num2 = new BigDecimal(1);
//其中 doubleValue()方法是BigDecimal类从Number抽象类中继承过来的,用来将BigDecimal型数据转换成double型数据
return num1.divide(num2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[] args) {
System.out.println(f(59.4684315613215648,3));
System.out.println(f(59.4685315613215648,3));
System.out.println(f(-15.5,0));
System.out.println(f(15.5,0));
}
}运行结果为:
59.468
59.469
-16.0
16.0
就写到这了。写该文章的目的主要是为了让我自己能牢记一些知识点,并能熟练的操作。若写的不好或者有错误的地方,还请多多包容,也希望能指点一二。谢谢!
2.继承关系:
java.lang.Object
|--java.lang.Number
|-- java.math.BigDecimal
3.所有已实现的接口:
Serializable,Comparable<BigDecimal>
需要记住:BigDecimal是Number的子类,其中Number是一个抽象类,为BigDecimal的格式转换功能提供了方法。
BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。因为本人也比较菜,做此文章只是为了熟记一下BigDecimal的精确小数功能,所以讲什么随心了...
与BigInteger一样,BigDecimal拥有基本的数学运算方法,方法名都是像add、divide什么的,普遍好理解的名字,只要在开发工具(像eclipse等带有提示功能的)中输入就能有提示。 在这主要说的就是舍入的方法了,因为BigDecimal是通过除法来进行舍入的,所以要熟记下面这个方法:
public BigDecimal divide(BigDecimal divisor,
int scale,
int roundingMode)其参数:
divisor 是表示被除数。若只进行四舍五入可让divisor=1
scale 是表示结果保留小数位数
roundingMode 是表示要应用的舍入模式
其中舍入模式有:(注这些舍入模式都为BigDecimal类的静态final方法)
public static final intROUND_HALF_UP :最常用的四舍五入模式
public static final intROUND_HALF_DOWN :五舍六入模式
[b]public static final int ROUND_UP:全部进一位
[/b]
public static final intROUND_DOWN: 直接全部舍去
等等,还有一些模式我至今没有遇到过,也就不提了
拿最普遍的四舍五入举例:
import java.math.BigDecimal;
public class H {
/**
* 实现准确的四舍五入
* @param num 需要进行四舍五入的数字
* @param scale 要保留的小数位
* @return 返回四舍五入后的数据
*/
public static double f(double num,int scale) {
//将double型数据转换为BigDecimal型
//其中num1为除数,num2为被除数
BigDecimal num1 = new BigDecimal(num);
BigDecimal num2 = new BigDecimal(1);
//其中 doubleValue()方法是BigDecimal类从Number抽象类中继承过来的,用来将BigDecimal型数据转换成double型数据
return num1.divide(num2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[] args) {
System.out.println(f(59.4684315613215648,3));
System.out.println(f(59.4685315613215648,3));
System.out.println(f(-15.5,0));
System.out.println(f(15.5,0));
}
}运行结果为:
59.468
59.469
-16.0
16.0
就写到这了。写该文章的目的主要是为了让我自己能牢记一些知识点,并能熟练的操作。若写的不好或者有错误的地方,还请多多包容,也希望能指点一二。谢谢!
相关文章推荐
- 系统常用类精确计算BigDecimal 制作控制几位小数和指定模式处理小数
- BigDecimal 执行精确小数计算
- BigDecimal 执行精确小数计算
- BigDecimal 执行精确小数计算
- 支付交易数据计算,保留两位小数,BigDecimal 加减乘除
- 佣金计算详解01:通过小数精度来控制判断因子中的<与<= ,>与>=
- 用while循环计算1+1/2!+1/3!+1/4!...+1/20!(BigDecimal精确计算小数)
- sql 语句 编写一个函数用来精确计算某个人的当前年龄(精确到一位小数),比如:20.3岁
- java 金额计算,商业计算 double不精确问题 BigDecimal,Double保留两位小数方法
- 使用BigDecimal进行精确小数计算
- BigDecimal用法 及其如何解决java数据精确计算
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- Java 表示超大型数据和浮点型计算不准确 BigInteger 和 BigDecimal 类介绍
- 精确的浮点计算-BigDecimal
- nyoj 128前缀式计算 【数据结构&&队列】
- Java中使用Bigdecimal类型进行精确商业计算
- Java 浮点数精确计算 BigDecimal的用法
- iOS精确计算打折,保留俩位小数,并且第三位小数四舍五入
- java练习 计算n位可被浮点数精确表示的小数