Java有八种基本数据类型
整形:byte,short,int,long(默认值0)
浮点:float,double(默认值0.0)
字符:char(默认值'u0000')
布尔:boolean(默认值false)
byte 1个字节 [-2^7,2^7-1]
short 2个字节 [-2^15,2^15-1]
int 4个字节 [-2^31,2^31-1]
long 8个字节 [-2^63,2^63-1]
float 4个字节 32位IEEE 754单精度范围
double 8个字节 64位IEEE 754双精度范围
char 2个字节 [0,2^16-1]
boolean 1个字节 true/false
原码:数字的二进制表示,首位数字0表示正数,1表示负数
+7的原码为: 0 0 0 0 0 1 1 1
-7的原码为: 1 0 0 0 0 1 1 1
反码:正数不变,负数为原码数值部分取反,符号位不变
+7的反码为: 0 0 0 0 0 1 1 1
-7的反码为: 1 1 1 1 1 0 0 0
补码:正数不变,负数为反码+1
+7的反码为: 0 0 0 0 0 1 1 1
-7的反码为: 1 1 1 1 1 0 0 1
整形在Java中是以补码的方式存储, -128表示为: 1 0 0 0 0 0 0 0
float的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308,一般优先使用double
计算机内数据都是以二进制的方式存储,一般存储值与显示值存在差异,例如:double类型 0.4D 实际存储为0.40000000000000002220446049250313080847263336181640625
在进行计算时,特别是乘法运算时,会产生较大偏差
Java中对金额进行操作时,不要使用浮点型
可以使用字符串存储,然后用工具类将字符串格式化为BigDecimal,再进行计算
相关用法可参考:https://blog.csdn.net/MatinBell/article/details/78570880