● 前言
之所以写下这个只是因为业务上的一些精度bug,服务端的位数与客户端不统一(java与c++),造成服务端发送的Dobule数值客户端无法接收,在某些语言上的数值显示异常(如阿语)
/**
* 临时备注::myslq的sum函数的返回值的类型不确定(Integer,Dobule),最好强转成BigDecimal(cast函数),服务端可以直接用long接收
*/
//强烈建议使用构造参数String的构造器,否则引起精度问题
BigDecimal a = new BigDecimal("2.27");
System.out.println("one : " + a);
BigDecimal b = new BigDecimal(1.22);
//损失精度
System.out.println("two : " + b);
b = new BigDecimal("1.22");
//加操作
//如果是值 a.add(b) 操作无返回值接收就出问题了,必须有一个对象去接收返回的结果,a本身还是原来的值
//如果BigDecimal是传参的话,那么他是值传递(参考基本类型,拷贝一份副本,改变的只是副本的值,实际值不会改变)
a = a.add(b);
System.out.println("three : " + a);
//减操作
a = a.subtract(new BigDecimal("1.5"));
System.out.println("four : " + a);
//乘操作
a = a.multiply(new BigDecimal("2.0"));
System.out.println("five :" + a);
//除操作
a = a.divide(new BigDecimal("3"),1);
System.out.println("six :" + a);
//乘方:pow(int) 取绝对值:abs() 取反:negate()
输出结果
one : 2.27
two : 1.2199999999999999733546474089962430298328399658203125
three : 3.49
four : 1.99
five :3.980
six :1.326