Object(对象)转换成Bigdecimal--然后加减乘除或比较大小
2020-07-13 05:47
776 查看
对象转换成Bigdecimal--然后加减乘除或比较大小
Object(对象)转Bigdecimal
- 我的项目经常用 Map<String,Object> map = new HashMap<String, Object>(); 接收数据, 那么当我用map.get(“key”)的时候, 获取的 value是 一个对象, 这个对象是BigDecimal类型的, 就需要转换处理;
- 对象转换成Bigdecimal的代码如下, 我把这段代码放到一个工具类, 调用工具类方便我平常的转换;
import java.math.BigDecimal; import java.math.BigInteger; public class MathUtils { public static BigDecimal getBigDecimal( Object value ) { BigDecimal ret = null; if( value != null ) { if( value instanceof BigDecimal ) { ret = (BigDecimal) value; } else if( value instanceof String ) { ret = new BigDecimal( (String) value ); } else if( value instanceof BigInteger ) { ret = new BigDecimal( (BigInteger) value ); } else if( value instanceof Number ) { ret = new BigDecimal( ((Number)value).doubleValue() ); } else { throw new ClassCastException("Not possible to coerce ["+value+"] from class "+value.getClass()+" into a BigDecimal."); } } return ret; } }
Bigdecimal的大小比较
- 比较大小的方法我一般用这种, 下面是代码, 有注释;
import java.math.BigDecimal; public class test { public void test11(){ BigDecimal aaaa = new BigDecimal(0.00); BigDecimal bbbb = new BigDecimal(0.71); if (aaaa.compareTo(bbbb) <= 0 ){ //如果aaaa 小于等于 bbbb就进来 System.out.println("aaaa小于等于 bbbb"); } if (bbbb.compareTo(new BigDecimal(0.60)) >= 0){ //如果bbbb大于等于0.60则进来 System.out.println("bbbb大于等于0.60"); } } }
Bigdecimal的加减乘除
- Bigdecimal的加减乘除API很多, 下面代码是日常使用的:
BigDecimal aaaa = new BigDecimal(0.01); BigDecimal bbbb = new BigDecimal(0.71); BigDecimal add = aaaa.add(bbbb);//加法运算 //加法运算结果: 0.71999999999999996468103002911220755777321755886077880859375 double add1 = aaaa.add(bbbb).doubleValue();//加法运算1 //加法1运算结果: 0.72 BigDecimal subtract = bbbb.subtract(aaaa);//减法运算 //减法运算结果: 0.69999999999999996426469639487777385511435568332672119140625 double subtract1 = bbbb.subtract(aaaa).doubleValue();//减法运算1 //减法1运算结果: 0.7 BigDecimal multiply = aaaa.multiply(bbbb);//乘法运算 //乘法运算结果: 0.0070999999999999997925270722731738641127628455785422783666072004738790968136896708529093302786350250244140625 double multiply1 = aaaa.multiply(bbbb).doubleValue();//乘法运算1 //乘法1运算结果: 0.0070999999999999995 /** * 除法运算,第二个参数为精度数,第三个参数为精度类型 */ BigDecimal divide = bbbb.divide(aaaa, 2); //除法运算, 保留两位小数, 默认用四舍五入方式 //除法运算结果: 70.99999999999999496930191966725953092785973001941779, // 然而运行结果没有只保留两位 BigDecimal divide1 = bbbb.divide(aaaa, 2, BigDecimal.ROUND_DOWN); //除法运算1, 向下取整 //除法1运算结果: 70.99 BigDecimal divide2 = bbbb.divide(aaaa, 2, BigDecimal.ROUND_UP); //除法运算2,向上取整 //除法2运算结果: 71.00 BigDecimal divide3 = bbbb.divide(aaaa, 2, BigDecimal.ROUND_HALF_UP); //除法运算3, 四舍五入 //除法3运算结果: 71.00 BigDecimal divide4 = bbbb.divide(aaaa, 2, BigDecimal.ROUND_HALF_DOWN); //除法运算4, 四舍五入,如果是5则向下舍 //除法4运算结果: 71.00
注意
- 本文上面的示范一般够基本的使用了, 以下是需要注意的:
1.1. BigDecial是immutable的,就像String一样,它的所有操作都会生成一个新的对象:
1.2. 不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false;
1.3. 如果直接使用a.divide(b)除法,有时会报除不尽异常, 解决:
a = a.divide(b,2,BigDecimal.ROUND_HALF_UP);
// BigDecial是immutable的,就像String一样,它的所有操作都会生成一个新的对象: BigDecimal amount = new BigDecimal(0.04); BigDecimal thisAmount = new BigDecimal(0.02); amount.add( thisAmount ); // 错误 amount = amount.add( thisAmount ); // 正确 // 不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false; // 例如: BigDecimal a = new BigDecimal("1.00"); BigDecimal b = new BigDecimal("1.0"); System.out.println(a.equals(b)); // false // 如果直接使用a.divide(b)除法,有时会报除不尽异常,如下: BigDecimal aa = new BigDecimal(10); BigDecimal bb = new BigDecimal(3); a = a.divide(b); // 错误会报如下异常:java.lang.ArithmeticException: Non-terminating // decimal expansion; no exact representable decimal result. //解决: a = a.divide(b,2,BigDecimal.ROUND_HALF_UP);
- 本文是个人工作中遇到的, 特此记录下来, 方便以后查阅;
- 想要深入了解, 就请各自找API研读:
相关文章推荐
- bigDecimal加减乘除及比较大小
- java中Bigdecimal比较大小和加减乘除
- BigDecimal的加减乘除及比较大小
- BigDecimal的加减乘除/比较大小
- Java BigDecimal 加减乘除及比较大小
- Java中BigDecimal的加减乘除、比较大小与使用注意事项
- BigDecimal的初始化、加减乘除和大小比较
- 声明一个Object对象,然后强制转换成Dog类型并判断是否转换成功。
- BigDecimal加减乘除以及大小比较
- Java中BigDecimal的加减乘除和比较大小
- Vector抛出异常与Object转换为Double后进行大小比较
- BigDecimal 的比较大小与加减乘除
- 声明一个Object对象,然后强制转换成Dog类型并判断是否转换成功。
- BigDecimal的加减乘除及比较大小
- jquery转换json对象为字符串JSON.stringify(jsonObject)
- 18.Comparable,Comparator比较对象大小
- BigDecimal比较大小问题
- BigDecimal比较大小
- 将Json字符串转换为ASP对象(parse json string to asp object)
- JSON解析之JSONObject对象---js对象转换成java对象