一、BigDecimal
BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。
如果为零或正数,则标度是小数点后的位数。
如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。
setScale(int n, roundingMode)方法
直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_DOWN)
进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_UP)
四舍五入,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)
四舍五入,2.35变成2.3,如果是5则向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)
浮点数没有办法是用二进制进行精确表示
CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差
java的float只能用来进行科学计算或工程计算,如果需要精确计算,非要用String来够造BigDecimal不可
在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算
BigDecimal b1 = new BigDecimal(Double.toString(0.48));
BigDecimal b2 = BigDecimal.valueOf(0.48);
二、char, byte和Byte的区别
char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 ); 大小范围 是0--65535; 可以表示一个整数,不能表示负数
char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符
byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127
1、char可以表中文字符,byte不可以
char e1 = '中', e2 = '国';
byte f = (byte) '中'; // 必须强制转换否则报错
System.out.println(e1);
System.out.println(e2);
System.out.println(f); // 输出45?
2、char、byte、int对于英文字符,可以相互转化
byte g = 'b'; // b对应ASCII是98
char h = (char) g;
char i = 85; // U对应ASCII是85
int j = 'h'; // h对应ASCII是104
System.out.println(g); //
System.out.println(h); //b
System.out.println(i); //U
System.out.println(j); //