Java中double和float比较

Java 中的 float 和 double 之间的主要区别在于,double 可以表示比 float 更大的数字。两种数据类型都表示带小数的数字,但浮点型的大小为 32 位,而双精度型的大小为 64 位。double 的大小是 float 的两倍——因此称为double。

如何找到 float 或 double 的范围?
在 Java 中,Float 和 Double 包装类有两个属性,分别返回 float 和 double 数据类型的上限和下限:MIN_VALUE和MAX_VALUE:
System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);

有些处理器和操作系统以不同的方式实现 JVM,因此不同平台的 double 或 float 的范围可能会有一些差异。

float 和 double Java 类型的大小有何不同?
从上面程序的输出中,我们可以看到浮点类型和双 Java 类型的大小差异:

  • Java 中 double 的上限范围是 1.7976931348623157E308。
  • Java 中 double 的下限范围是 4.9E-324。
  • Java 中浮点数的上限范围是 3.4028235E38。
  • Java 中浮点数的下限范围是 1.4E-45。

如何在 Java 中声明浮点数和双倍数?
要在 Java 中声明 double,请执行以下操作:

  • 指定类型为 double。
  • 提供一个变量名。
  • 指定一个 double 范围内的值。
double trouble = 123.456;

下面是如何在 Java 中声明浮点数:

  • 指定类型为 float。
  • 提供一个变量名。
  • 指定一个浮点范围内的值。
  • 在最后一个数字后添加字母 f:
float some = 654.321f; //注意用字母 "f "明确表示

Java 的默认小数类型是 double 还是 float?
当 Java 在程序中遇到十进制数,或计算产生浮点数时,Java 会将其视为double。

例如,下面两行代码都无法编译,因为 Java 认为任何小数都是 double。由于浮点数无法处理双倍数的全部精度,因此这三行代码都会出错:

float myboat = 1.2;
float yourBoat = 10 * 2.5;
float theBoat = Math.PI * 10;

如何解决 double 到 float 的转换错误?
错误 "类型不匹配:无法将 double 转换为 float "可通过以下方法修复:

  • 添加字母 f 以明确表示浮点数。
  • 将 myBoat 的数据类型从 float 更改为 double。
  • 使用转换将返回的 double 转换为 float。
float myboat = 1.2f;  //显式符号
double yourBoat = 10 * 2.5;  //将浮点数改为双数
float theBoat = (float) (Math.PI * 10);  // 从 double 到 float 的显式转换

比较:
上限 :

  • float:   3.4028235E38  
  • double: 1.7976931348623157E308
下限 :
  • float:   1.4E-45 
  • double:   4.9E-324

大小:

  •  float:  32位
  • double:    64位

表示法: 

  • float:  字母 f (.01 f ) 
  • double:   字母 d (0.1 d )

常见用途:

  • float:    微型设备、物联网、移动    
  • double:企业应用程序、JPA、JDBC

是否是Java默认   

  •  float:否
  • double:如无特别申明,double是Java默认

备选   

  • BigDecimal
  • BigDecimal
匹配整数类型:
  • float:    32 位整数 
  • double:   64位长

类名:

  • float:   Float(大写“F”)    
  • double:Double(大写“D”)

何时使用浮点数,何时使用双倍数?
在日常编程中,使用 double 而不是 float。

在学习 Java 时,double 更容易使用,而且在企业应用程序中最常用。

当内存有限时,例如部署到手持设备、物联网设备或移动应用程序中的应用程序,应使用 float 而不是 double。

在数据仓库或人工智能系统中,有时应用程序会在数组中保存数以万计的值。如果所有值都在浮点数的范围内,那么在这种情况下使用较小的 Java 数据类型是合理的,否则数组元素会不必要地消耗内存。

数学中有浮点数和双精度问题吗?
数据精度可能是double和float类型的问题,因为二进制数并不总是干净地转换为十进制。

例如,以下程序将 11.3999 打印为 5.6 + 5.8 之和:

double precision = 0;
precision = precision + 5.6;
precision = precision + 5.8;
System.out.println(precision); // prints 11.399999999999999


为了避免精度错误,Java 提供了一个名为BigDecimal的类,它可以更高精度地执行浮点表示法算术。