# 在数字和字符串之间转换

> 原文： [https://docs.oracle.com/javase/tutorial/java/data/converting.html](https://docs.oracle.com/javase/tutorial/java/data/converting.html)

## 将字符串转换为数字

通常，程序以字符串对象中的数字数据结束 - 例如，用户输入的值。

包含原始数字类型的`Number`子类（ [`Byte`](https://docs.oracle.com/javase/8/docs/api/java/lang/Byte.html) ， [`Integer`](https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html) ， [`Double`](https://docs.oracle.com/javase/8/docs/api/java/lang/Double.html) ， [`Float`](https://docs.oracle.com/javase/8/docs/api/java/lang/Float.html) ， [`Long`](https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html) 和 [`Short`](https://docs.oracle.com/javase/8/docs/api/java/lang/Short.html) ）各自提供一个名为`valueOf`的类方法，它将字符串转换为该类型的对象。下面是一个示例， [`ValueOfDemo`](examples/ValueOfDemo.java) ，从命令行获取两个字符串，将它们转换为数字，并对值执行算术运算：

```
public class ValueOfDemo {
    public static void main(String[] args) {

        // this program requires two 
        // arguments on the command line 
        if (args.length == 2) {
            // convert strings to numbers
            float a = (Float.valueOf(args[0])).floatValue(); 
            float b = (Float.valueOf(args[1])).floatValue();

            // do some arithmetic
            System.out.println("a + b = " +
                               (a + b));
            System.out.println("a - b = " +
                               (a - b));
            System.out.println("a * b = " +
                               (a * b));
            System.out.println("a / b = " +
                               (a / b));
            System.out.println("a % b = " +
                               (a % b));
        } else {
            System.out.println("This program " +
                "requires two command-line arguments.");
        }
    }
}

```

当您使用`4.5`和`87.2`作为命令行参数时，以下是程序的输出：

```
a + b = 91.7
a - b = -82.7
a * b = 392.4
a / b = 0.0516055
a % b = 4.5

```

* * *

**Note:** Each of the `Number` subclasses that wrap primitive numeric types also provides a `parseXXXX()` method (for example, `parseFloat()`) that can be used to convert strings to primitive numbers. Since a primitive type is returned instead of an object, the `parseFloat()` method is more direct than the `valueOf()` method. For example, in the `ValueOfDemo` program, we could use:

```
float a = Float.parseFloat(args[0]);
float b = Float.parseFloat(args[1]);

```

* * *

## 将数字转换为字符串

有时您需要将数字转换为字符串，因为您需要对其字符串形式的值进行操作。有几种简单的方法可以将数字转换为字符串：

```
int i;
// Concatenate "i" with an empty string; conversion is handled for you.
String s1 = "" + i;

```

要么

```
// The valueOf class method.
String s2 = String.valueOf(i);

```

每个`Number`子类都包含一个类方法`toString()`，它将原始类型转换为字符串。例如：

```
int i;
double d;
String s3 = Integer.toString(i); 
String s4 = Double.toString(d); 

```

[`ToStringDemo`](examples/ToStringDemo.java) 示例使用`toString`方法将数字转换为字符串。然后程序使用一些字符串方法来计算小数点前后的位数：

```
public class ToStringDemo {

    public static void main(String[] args) {
        double d = 858.48;
        String s = Double.toString(d);

        int dot = s.indexOf('.');

        System.out.println(dot + " digits " +
            "before decimal point.");
        System.out.println( (s.length() - dot - 1) +
            " digits after decimal point.");
    }
}

```

该程序的输出是：

```
3 digits before decimal point.
2 digits after decimal point.

```