目录
一、数据初始化
package com.saas.demo;
import java.math.BigDecimal;
/**
* 初始化
*/
public class BigDecimalDemo {
public static void main(String[] args) {
//使用构造函数,参数是整型
BigDecimal num = new BigDecimal(10);
//使用构造函数,参数是字符串
BigDecimal num1 = new BigDecimal("10");
//使用构造函数,参数是双精度浮点型(不推荐使用,精度丢失)
BigDecimal num2 = new BigDecimal(10.01);
//使用构造函数,参数是长整型
BigDecimal num3 = new BigDecimal(10L);
//使用静态常量,有BigDecimal.ZERO、BigDecimal.ONE和BigDecimal.TEN
BigDecimal num4 = BigDecimal.TEN;
//使用静态方法,支持整型和双精度浮点型(推荐使用,参数是双精度浮点型时,内部会优先转换成字符串)
BigDecimal num5 = BigDecimal.valueOf(10.01);
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
System.out.println("num3:"+num3);
System.out.println("num4:"+num4);
System.out.println("num5:"+num5);
}
}
二、数据类型转换
package com.saas.demo;
import java.math.BigDecimal;
/**
* 类型转换
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("10.91");
//转成整型
int num1 = num.intValue();
//转成长整型
long num2 = num.longValue();
//转成浮点型
float num3 = num.floatValue();
//转成双精度浮点型
double num4 = num.doubleValue();
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
System.out.println("num3:"+num3);
System.out.println("num4:"+num4);
}
}
三、进行基本运算
package com.saas.demo;
import java.math.BigDecimal;
/**
* 基本运算
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("3");
BigDecimal num1 = new BigDecimal("4");
//加法运算
BigDecimal num2 = num.add(num1);
//减法运算
BigDecimal num3 = num.subtract(num1);
//乘法运算
BigDecimal num4 = num.multiply(num1);
//除法运算
BigDecimal num5 = num.divide(num1);
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
System.out.println("num3:"+num3);
System.out.println("num4:"+num4);
System.out.println("num5:"+num5);
}
}
四、设置数值的精度
ROUND_UP: 保留设置的小数,剩余小数位数大于零则进一位ROUND_DOWN:保留设置的小数,剩余小数后面都直接舍弃ROUND_HALF_UP:保留设置的小数,剩余小数后一位进行四舍五入ROUND_HALF_DOWN:保留设置的小数,剩余小数后一位进行五舍六入ROUND_CEILING:保留设置的小数,如果值是正数则按ROUND_UP变化,值是负数则按ROUND_DOWN变化ROUND_FLOOR:保留设置的小数,如果值是正数则按ROUND_DOWN变化,值是负数则按ROUND_UP变化ROUND_HALF_EVEN:保留设置的小数,进行四舍六入,如果刚好是五,则看前一位是偶数就舍弃,奇数就则进一位ROUND_UNNECESSARY:保留设置的小数,如果存在剩余小数位且不为0会报错:java.lang.ArithmeticException
1.通过除法设置
package com.saas.demo;
import java.math.BigDecimal;
/**
* 设置精度
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("20");
BigDecimal num1 = new BigDecimal("3");
//保留两位小数,剩余小数位数大于零则进一位
BigDecimal num2 = num.divide(num1,2,BigDecimal.ROUND_UP);
//保留两位小数,剩余小数后面都直接舍弃
BigDecimal num3 = num.divide(num1,2,BigDecimal.ROUND_DOWN);
//保留两位小数,剩余小数后一位进行四舍五入
BigDecimal num4 = num.divide(num1,2,BigDecimal.ROUND_HALF_UP);
//保留两位小数,剩余小数后一位进行五舍六入
BigDecimal num5 = num.divide(num1,2,BigDecimal.ROUND_HALF_DOWN);
//保留两位小数,如果值是正数则按ROUND_UP变化,值是负数则按ROUND_DOWN变化
BigDecimal num6 = num.divide(num1,2,BigDecimal.ROUND_CEILING);
//保留两位小数,如果值是正数则按ROUND_DOWN变化,值是负数则按ROUND_UP变化
BigDecimal num7= num.divide(num1,2,BigDecimal.ROUND_FLOOR);
//保留两位小数,进行四舍六入,如果刚好是五,则看前一位是偶数就舍弃,奇数就则进一位
BigDecimal num8= num.divide(num1,2,BigDecimal.ROUND_HALF_EVEN);
//保留两位小数,如果存在剩余小数位且不为0会报错:java.lang.ArithmeticException
//BigDecimal num9= num.divide(num1,2,BigDecimal.ROUND_UNNECESSARY);
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
System.out.println("num3:"+num3);
System.out.println("num4:"+num4);
System.out.println("num5:"+num5);
System.out.println("num6:"+num6);
System.out.println("num7:"+num7);
System.out.println("num8:"+num8);
//System.out.println("num9:"+num9);
}
}
2.通过乘法设置
package com.saas.demo;
import java.math.BigDecimal;
/**
* 设置精度
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("12.341");
BigDecimal num1 = new BigDecimal("2");
//保留两位小数,剩余小数位数大于零则进一位
BigDecimal num2 = num.multiply(num1).setScale(2,BigDecimal.ROUND_UP);
//保留两位小数,剩余小数后面都直接舍弃
BigDecimal num3 = num.multiply(num1).setScale(2,BigDecimal.ROUND_DOWN);
//保留两位小数,剩余小数后一位进行四舍五入
BigDecimal num4 = num.multiply(num1).setScale(2,BigDecimal.ROUND_HALF_UP);
//保留两位小数,剩余小数后一位进行五舍六入
BigDecimal num5 = num.multiply(num1).setScale(2,BigDecimal.ROUND_HALF_DOWN);
//保留两位小数,如果值是正数则按ROUND_UP变化,值是负数则按ROUND_DOWN变化
BigDecimal num6 = num.multiply(num1).setScale(2,BigDecimal.ROUND_CEILING);
//保留两位小数,如果值是正数则按ROUND_DOWN变化,值是负数则按ROUND_UP变化
BigDecimal num7= num.multiply(num1).setScale(2,BigDecimal.ROUND_FLOOR);
//保留两位小数,进行四舍六入,如果刚好是五,则看前一位是偶数就舍弃,奇数就则进一位
BigDecimal num8= num.multiply(num1).setScale(2,BigDecimal.ROUND_HALF_EVEN);
//保留两位小数,如果存在剩余小数位且不为0会报错:java.lang.ArithmeticException
BigDecimal num9= num.multiply(num1).setScale(3,BigDecimal.ROUND_UNNECESSARY);
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
System.out.println("num3:"+num3);
System.out.println("num4:"+num4);
System.out.println("num5:"+num5);
System.out.println("num6:"+num6);
System.out.println("num7:"+num7);
System.out.println("num8:"+num8);
System.out.println("num9:"+num9);
}
}
五、比较数值大小
package com.saas.demo;
import java.math.BigDecimal;
/**
* 比较大小
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("3");
BigDecimal num1 = new BigDecimal("4");
int flag = num.compareTo(num1);
//flag大于0,表示前者比较大;flag小于0,表示后者比较大;flag等于0,表示两个一样大;
if(flag >0){
System.out.println(num+"大于"+num1);
}else if(flag < 0){
System.out.println(num+"小于"+num1);
}else {
System.out.println(num+"等于"+num1);
}
}
}
六、其他常用方法
1.取绝对值
package com.saas.demo;
import java.math.BigDecimal;
/**
* 取绝对值
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("-3");
//获取绝对值
BigDecimal num1 = num.abs();
System.out.println("num:"+num);
System.out.println("num1:"+num1);
}
}
2.取相反数
package com.saas.demo;
import java.math.BigDecimal;
/**
* 取相反数
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("3");
//获取相反数
BigDecimal num1 = num.negate();
System.out.println("num:"+num);
System.out.println("num1:"+num1);
}
}
3.比较取最大值
package com.saas.demo;
import java.math.BigDecimal;
/**
* 比较取最大值
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("3");
BigDecimal num1 = new BigDecimal("4");
//比较两个数,取最大值
BigDecimal num2 = num.max(num1);
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
}
}
4.比较取最小值
package com.saas.demo;
import java.math.BigDecimal;
/**
* 比较取最小值
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("3");
BigDecimal num1 = new BigDecimal("4");
//比较两个数,取最小值
BigDecimal num2 = num.min(num1);
System.out.println("num:"+num);
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);
}
}
5.查精度
package com.saas.demo;
import java.math.BigDecimal;
/**
* 查精度
*/
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal num = new BigDecimal("3.45");
//获取精度
int num1 = num.scale();
System.out.println("num:"+num);
System.out.println("num1:"+num1);
}
}