类型 所需字节 实际范围 整数部分的不需要记忆,需要用到的时候使用 Integer.MAX_VALUE or Integer.Min_VALUE
byte 1字节 (8位) -128~127
short 2字节 -32768~32767
int 4字节 -2147483648~2147483647 也就是21亿左右
long 8字节 没数错的话922亿亿左右,真大,,也就是 -2^63~ 2^63-1 补码
float 4字节 正负1.175494351 E – 38 ~ 3.402823466 E + 38 以及0 精度是小数点后7位 ,根据实际情况会产生进位,但是并不是四舍五入(原因不知)
double 8字节 正负2.2250738585072014 E – 308 ~ 1.7976931348623158 E + 308 以及 0 精度是小数点后15位 ,后同上
声明的时候只需在末尾加上f 或者d即可
char 2字节 本想用sizeof查看一下char的大小,但是java好像并没有提供sizeof 想要了解所占大小 用Integer.SIZE查看 (位数)
boolean 1字节 true/false
以上分别对应的包装类是: Byte Short Integer Long Float Double Character Boolean 同属java.lang.*
当对精度有严格要求时:要使用java.math.BigDecimal
以防丢失,拷过来:
package ex;
import java.math.*;
public class BigDecimalDemo {
public static void main(String[] args){
System.out.println(ArithUtil.add(0.01, 0.05));
System.out.println(ArithUtil.sub(1.0, 0.42));
System.out.println(ArithUtil.mul(4.015, 100));
System.out.println(ArithUtil.div(123.3, 100));
}
}
class ArithUtil{
private static final int DEF_DIV_SCALE=10;
private ArithUtil(){}
public static double add(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.add(b2).doubleValue();
}
public static double sub(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.subtract(b2).doubleValue();
}
public static double mul(double d1,double d2){
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.multiply(b2).doubleValue();
}
public static double div(double d1,double d2){
return div(d1,d2,DEF_DIV_SCALE);
}
public static double div(double d1,double d2,int scale){
if(scale<0){
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b1=new BigDecimal(Double.toString(d1));
BigDecimal b2=new BigDecimal(Double.toString(d2));
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
输出结果 :
0.06
0.58
401.5 1.233