概述

在Java中,将Float类型转换为String,反之亦然,是一项常见的操作。然而,实现这一转换的方式众多,可能会让人困惑,不知道选择哪种方法。本文将展示并比较所有可用的选项。

1. 引言

首先,我们来看看将Float值转换为String的常见方法。

1.1. 字符串连接

最直接的方法是将浮点数值与空字符串连接起来:

float givenFloat = 1.25f;

String result = givenFloat + "";

assertEquals("1.25", result);

同样地,我们也可以将Float对象添加到空字符串中,得到相同的结果。当使用Float对象时,其toString()方法会自动被调用:

Float givenFloat = 1.25f;

String result = givenFloat + "";

assertEquals("1.25", result);

如果Float对象为null,连接结果将是“null”字符串:

Float givenFloat = null;

String result = givenFloat + "";

assertEquals("null", result);

1.2. Float.toString()

另一种选择是使用Float类的静态toString()方法进行转换。我们可以传入float基本类型值或Float对象:

Float givenFloat = 1.25f;

String result = Float.toString(givenFloat);

assertEquals("1.25", result);

如果将null作为参数传递给该方法,运行时会出现NullPointerException

Float givenFloat = null;

assertThrows(NullPointerException.class, () -> Float.toString(givenFloat));

1.3. String.valueOf()

类似地,我们可以使用String的静态valueOf()方法:

Float givenFloat = 1.25f;

String result = String.valueOf(givenFloat);

assertEquals("1.25", result);

Float.toString()不同的是,如果传递null作为参数,valueOf()不会抛出异常,而是返回“null”字符串:

Float givenFloat = null;

String result = String.valueOf(givenFloat);

assertEquals("null", result);

1.4. String.format()

Stringformat()静态方法提供了额外的格式化选项。需要注意的是,如果没有限制小数位数,即使没有小数部分,结果也会包含多余的零。例如:

Float givenFloat = 1.25f;

String result = String.format("%f", givenFloat);

assertEquals("1.250000", result);

当我们指定小数点后的小数位数时,format()方法会进行四舍五入:

Float givenFloat = 1.256f;

String result = String.format("%.2f", givenFloat);

assertEquals("1.26", result);

如果传递nullFloat,转换后的结果将是“null”字符串:

Float givenFloat = null;

String result = String.format("%f", givenFloat);

assertEquals("null", result);

1.5. DecimalFormat

最后,DecimalFormat类的format()方法允许我们将浮点数值转换为自定义格式的字符串。优点在于,我们可以精确地定义输出字符串中小数点后的位数。

下面是一个示例演示如何使用它:

Float givenFloat = 1.25f;

String result = new DecimalFormat("#.0000").format(givenFloat);

assertEquals("1.2500", result);

如果格式化后没有小数部分,DecimalFormat将返回整数:

Float givenFloat = 1.0025f;

String result = new DecimalFormat("#.##").format(givenFloat);

assertEquals("1", result);

如果传递null作为参数,将抛出IllegalArgumentException

Float givenFloat = null;

assertThrows(IllegalArgumentException.class, () -> new DecimalFormat("#.000").format(givenFloat));

2. StringFloat

接下来,我们看看将String值转换为Float的常见方法。

2.1. Float.parseFloat()

最常见的方法之一是使用Float的静态方法parseFloat()它会将String参数表示的浮点数值转换为float基本类型值。同时,它会忽略前后空格:

String givenString = "1.25";

float result = Float.parseFloat(givenString);

assertEquals(1.25f, result);

如果String参数为null,会抛出NullPointerException

String givenString = null;

assertThrows(NullPointerException.class, () -> Float.parseFloat(givenString));

如果String参数不能解析为浮点数,会抛出NumberFormatException

String givenString = "1.23x";

assertThrows(NumberFormatException.class, () -> Float.parseFloat(givenString));

2.2. Float.valueOf()

类似地,我们可以使用Float的静态valueOf()方法。区别在于valueOf()返回一个Float对象。具体来说,它会调用parseFloat()方法并将结果封装成一个Float对象:

String givenString = "1.25";

Float result = Float.valueOf(givenString);

assertEquals(1.25f, result);

同样,如果传递无法解析的String,会抛出NumberFormatException

String givenString = "1.25x";

assertThrows(NumberFormatException.class, () -> Float.valueOf(givenString));

2.3. DecimalFormat

我们也可以使用DecimalFormat来将String转换为Float其中一个主要优势是可以指定自定义的小数点分隔符

String givenString = "1,250";
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator(',');
DecimalFormat decimalFormat = new DecimalFormat("#.000");
decimalFormat.setDecimalFormatSymbols(symbols);

Float result = decimalFormat.parse(givenString).floatValue();

assertEquals(1.25f, result);

2.4. Float构造函数

最后,可以直接使用Float的构造函数进行转换。内部它会调用Float的静态parseFloat()方法,并创建一个Float对象:

String givenString = "1.25";

Float result = new Float(givenString);

assertEquals(1.25f, result);

从Java 9开始,这个构造函数已经被弃用。建议使用其他静态工厂方法,如parseFloat()valueOf()

3. 总结

本文探讨了将String实例转换为floatFloat实例,以及反过来的多种方式。对于简单的转换,字符串连接和Float.toString()是将Float转换为String的理想选择。如果需要更复杂的格式化,DecimalFormat是最合适的工具。在将字符串转换为浮点数值时,如果需要float基本类型,可以使用Float.parseFloat();如果偏好Float对象,可以使用Float.valueOf()。同样,对于自定义格式化,DecimalFormat是最佳选项。

所有示例代码可在GitHub上获取。