HOWTO · Java

在 Java 中将 Int 转换为 Float

本教程将演示如何在 java 中将整数转换为浮点数。

本页内容

在 Java 中,将基本类型 int 转换为 float,只需把整数赋给 float 变量:float converted = value;。Java 会自动执行这种扩宽转换,因此不需要显式类型转换。如果值保存在 Integer 包装对象中,也可以调用它的 floatValue() 实例方法。请注意,float 的精度有限,因此转换某些较大的整数时会发生舍入。

使用扩宽转换将 int 转换为 float

基本类型 int 可以直接赋给基本类型 float。由于 float 能表示的数值范围比 int 更广,Java 会在赋值时扩宽该值。这是一种数值转换,并不意味着必须编写类型转换表达式。下面的完整程序展示了使用较小数值的常见情况。

运行这个独立示例:

本节中的代码以及显示的标签或输出仍为英文。

public class Main {
  public static void main(String[] args) {
    int value = 56;
    float converted = value;
    System.out.println(converted);
  }
}

程序会使用 Java 标准的 float 格式输出转换后的值。这个示例包含完整的 Java 类和入口点,因此可以编译并作为独立的小程序运行。转换发生在将 value 赋给 converted 时;打印操作只是显示转换后的值。对于已经是 int 类型的变量,直接赋值是最清楚的写法。

你也可以写成 float converted = (float) value;,但这个强制转换不会改变转换本身。对于 int 到 float 的赋值,它是多余的,还可能让读者误以为 Java 在这里要求显式转换。除非有其他理由需要向代码读者明确展示转换,否则请直接赋值。

对 Integer 对象使用 floatValue()

Integer 是 Java 为基本类型 int 提供的包装类。如果某个值已经保存在 Integer 对象中,floatValue() 会以基本类型 float 返回该值。例如,表达式 Integer count = Integer.valueOf(56); float converted = count.floatValue(); 会转换包装对象中的值。这里的 floatValue() 是在 count 上调用的实例方法。

这种包装对象用法与上文直接赋值基本类型的方式不同。如果变量已经是 int,就没有必要通过 Integer 调用方法;直接赋值即可。如果值是从 API 或集合中以 Integer 形式取得的,调用 floatValue() 可以明确展示拆箱和转换过程。Java 也可以在赋给 float 时自动拆箱 Integer,但如果你想在转换发生的位置明确展示转换,这个方法会很有用。该方法不会提高目标类型的精度:它返回的仍是 float,并受相同的精度限制。

了解将 int 转换为 float 时的精度限制

虽然这两种 Java 类型都使用 32 位,但它们表示数字的方式不同。int 范围内的每个整数都能精确表示。float 使用符号、指数和有效数;对于普通的有限值,有效数精度为 24 位。因此,只有从 −2^24 到 2^24 的连续范围内,每个整数都能由它精确表示。超出这个范围后,可表示的数值之间会出现间隔,某些整数会被舍入为附近的 float 值。

这并不表示超过该阈值的每次转换都会改变数值:一些更大的整数仍然可以精确表示。关键在于,超出这个范围后,无法保证每个整数都能精确表示。扩宽描述的是 Java 中的类型转换,并不保证目标类型具有足够的精度来保留每个源值。

如果计算或标识符需要在整个 int 范围内保持整数精确值,请继续使用 int,或改用其他精确整数类型,而不要转换为 float。如果你需要进行小数运算,并且能够接受较大数值舍入,float 可能适用。请根据应用所需的精度选择类型;不要认为转换后的较大数值在所有情况下都必定与原整数相等。