Java 和Oracle的数据类型

一、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类来进行精确计算

1  BigDecimal b1 = new BigDecimal(Double.toString(0.48));
2  BigDecimal b2 = BigDecimal.valueOf(0.48);

二、char, byteByte的区别

char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 ); 大小范围 是0--65535; 可以表示一个整数,不能表示负数

char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 

byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 

1、char可以表中文字符,byte不可以

1 char e1 = '中', e2 = '国';
2 byte f = (byte) '中'; // 必须强制转换否则报错
3 System.out.println(e1);
4 System.out.println(e2);
5 System.out.println(f); // 输出45?

2、char、byte、int对于英文字符,可以相互转化

1 byte g = 'b'; // b对应ASCII是98
2 char h = (char) g;
3 char i = 85; // U对应ASCII是85
4 int j = 'h'; // h对应ASCII是104
5 System.out.println(g);     //98
6 System.out.println(h);     //b
7 System.out.println(i);      //U
8 System.out.println(j);      //104

原文地址:https://www.cnblogs.com/wangwanchao/p/5315849.html