double和float的区别与使用
double和float类型的区别与使用
- 在Java中,double和float都是基本数据类型,用于表示浮点数(即带有小数点的数)。
- 它们在精度和范围上有所不同:
- double类型提供了更高的精度和更大的范围,而float类型则精度更低,范围更少;
- 声明这些类型的变量时,你需要遵循特定的语法规则。
double 类型
- double类型的变量用于存储双精度浮点数。当你声明一个double类型的变量时,你不需要在数值后面加上任何特定的后缀(尽管在某些情况下,加上D或d后缀可以明确表示这是一个double类型的字面量,但这对于变量声明本身不是必需的)。
- 使用一个浮点数字面量(如3.14),Java会将其视为double类型
- 如果直接使用一个整型(如10),Java会进行自动类型转换,即从int 自动转换 为double类型。
double md = 3.14; // 3.14就是double类型的数据
double ad = 3.0; // 注意:即使没有小数部分,这也是一个double类型的浮点数
double c = 3;// 自动类型转换(int-》double)
double d = 10.0d;
double e = 10D;
float 类型
- float类型的变量用于存储单精度浮点数。
- 在声明float类型的变量并给它赋值时:
如果你直接使用一个浮点数字面量(如3.14),Java会将其视为double类型
,因为浮点数字面量默认是double类型的。为了避免编译错误,你需要在数值后面加上F或f后缀
来明确表示这是一个float类型的字面量。(或者使用 强制类型转换,不建议,会产生精度损失)- 如果直接使用一个整型(如3),Java会进行自动类型转换,即从int 自动转换 为float类型。
float j = 3.14;//这个会报错的,double不可以自动转换为float类型
float m = 3.14f;
float n = 3.0f; // 必须加上f或F后缀
float a = 3;//这个也可以(自动类型转换)
例题:分别有三个变量,a,b,c,请问一下的定义中哪些有错误:float a=2;float b=2.5;float c=3.0f
Float b = 2.5;存在语法错误,在Java中2.5是double类型的数据,不能自动转换为float类型的数据(可以使用强制类型转换,但是会有精度损失的风险,不建议),所以应该改成float b= 2.5f;
Float a= 2;虽然没有语法错误,但是也存在一定的风险,因为2是一个int类型的数据,它会产生自动类型转换,有int转换为float。所以最好是改成float = 2f;
总结
double和float的精度损失的问题解决
BigDecimal类
:在Java中,BigDecimal类提供了一种精确的浮点数计算方式。这个类可以表示任意精度的十进制数
,并且可以执行精确的数学运算。当需要处理精确的小数运算时,可以使用BigDecimal来代替基本数据类型float和double。
double和float类型的数据进行运算时,是可能发生精度损失,不是一定会发生精度损失的问题
double a =0.1;
double b = 0.2;
System.out.println(a + b);//0.30000000000000004
System.out.println(a * b);//0.020000000000000004
BigDecimal c = new BigDecimal("0.1");
BigDecimal d = new BigDecimal("0.2");
BigDecimal sum = c.add(d); //求和
System.out.println(sum);// 结果为 0.3
BigDecimal ji = c.multiply(d);//乘积
System.out.println(ji);// 结果为0。02
作者:大刀爱敲代码