概述
1、double和float问题
double和float在平时使用中常常会出现一些意想不到的结果,当我们想进行精确计算时他们显然不是一个好选择,如果想保留小数点后几位显然更难操作。因此在涉及到金钱计算或想指定小数位数时用BigDecimal是最好的选择。
double和float出现的问题
public static void main(String[] args)
{
System.out.println(0.2 + 0.1);
System.out.println(0.3 - 0.1);
System.out.println(0.2 * 0.1);
System.out.println(0.3 / 0.1);
}
/*运行结果:
0.30000000000000004
0.19999999999999998
0.020000000000000004
2.9999999999999996
*/
2.BigDecimal构造方法
1.public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用
2.public BigDecimal(int val) 将int表示形式转换成BigDecimal
3.public BigDecimal(String val) 将String表示形式转换成BigDecimal
//double构造的弊端
public static void main(String[] args)
{
BigDecimal ints= new BigDecimal(2);
BigDecimal doubles = new BigDecimal(2.3);
BigDecimal str = new BigDecimal("2.3");
System.out.println("ins t= " + ints);
System.out.println("doubles = " + doubles );
System.out.println("String = " + str );
}
/*运行结果:
ints = 2
doubles = 2.29999999999999982236431605997495353221893310546875
Str = 2.3
*/
4.double转BigDecimal方式。
用.valueOf()方法、或将double类型转为字符串
BigDecimal double1 = BigDecimal.valueOf(2.3);
BigDecimal double2 = new BigDecimal(Double.toString(2.3));
3.BigDecimal常用方法,+ - * /
add (BigDecimal value); //加法
subtract (BigDecimal value); //减法
multiply (BigDecimal value); //乘法
divide (BigDecimal value); //除法
divide (BigDecimal divisor, int scale, int roundingMode) //除法的参数,可设置小数位数和舍入方式
setScale (int scale, int roundingMode) //设置小数位数,舍入方式
1.加、减、乘、除运算
public static void main(String[] args)
{
BigDecimal a = new BigDecimal("4.5");
BigDecimal b = new BigDecimal("1.5");
System.out.println("a + b =" + a.add(b));
System.out.println("a - b =" + a.subtract(b));
System.out.println("a * b =" + a.multiply(b));
System.out.println("a / b =" + a.divide(b));
}
2.除法有可能会除不尽,这时可以给 divide 方法指定参数
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
第一个参数表示除数
第二个参数表示小数点后保留位数(设置小数位数可以利用这个参数)
第三个参数表示舍入模式
除法的第三个参数值
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
3.设置小数位数和舍入方式 。setScale()
public static void main(String[] args)
{
BigDecimal a = new BigDecimal("4.5635");
a = a.setScale(3, RoundingMode.HALF_UP); //保留3位小数,且四舍五入
System.out.println(a);
}
原文链接:https://blog.csdn.net/fengdong1996/article/details/88849908
最后
以上就是阳光大叔为你收集整理的BigDecimal常用方法的全部内容,希望文章能够帮你解决BigDecimal常用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复