文字列を数値に変換するには (parseInt / toInt)

文字列を数値に変換する方法。

多くの言語では動的/静的の違いはあっても文字列と数値とで型が区別されるので、文字列から数値への変換が必要なことが多い。

逆の数値から文字列に変換する方法も参照。

C言語 / C++

atoi関数を使う。

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "10";
  int i = atoi(str);
  printf("%d\n", i);
  /* => 10 */
}

Go言語 (golang)

strconv.Atoi関数を使う。

import "fmt"
import "strconv"

func main() {
    var str string = "10"
    var i int
    var err error
    i, err = strconv.Atoi(str)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%d\n", i)
    // => 10
}

数値に変換できた場合は errnil になり、できない場合は err にエラーのオブジェクトが入る。

Java

Signature:

// 10進数の文字列を整数に変換
int i = Integer.parseInt(str);

// 16進数の文字列を整数に変換
int i = Integer.parseInt(str, 16);

数値に変換できない文字列の場合は、java.lang.NumberFormatException がスローされる。

文字列が "0" で始まっていてもそれは単に無視されて変換されるので、 "010"10 になる。

Scala

Javaでの方法はそのままScalaでも使えるが、Scalaでは文字列のクラスに以下のメソッドが追加されているので、それを使ってもよい。

Signature:

val str = "10";
val i: Int = str.toInt; // => 10

val str = "1.5";
val f: Double = str.toDouble; // => 1.5

val str = "1.5";
val i: Int = str.toInt;
// java.lang.NumberFormatException がスローされる

数値に変換できない文字列の場合は、java.lang.NumberFormatException がスローされる。

文字列が "0" で始まっていてもそれは単に無視されて変換されるので、 "010"10 になる。

PHP

// 整数への変換
(int)$str

// 浮動小数点数への変換 (以下の2つはまったく同じ効果)
(float)$str
(double)$str

(int)"0"      // => 0
(int)"-0"     // => 0
(int)"1"      // => 1
(int)"1.5"    // => 1
(int)"-1.5"   // => -1
(int)"010"    // => 10
(int)"0x10"   // => 0
(int)"10 abc" // => 10

演算子や関数などで、数字を前提とする場所に文字列を与えた場合は、上記のように明示的に数値に変換しなくても自動で変換されるので、使う機会は少ない。

Python

# 10進数の文字列を整数に変換
int(str)

# 文字列を浮動小数点数に変換
float(str)

Ruby

# 整数に変換
str.to_i

# 浮動小数点数に変換
str.to_f

16進数の文字列を整数にしたい場合は to_i の引数に16を渡す。

p "27".to_i
# => 27
p "27".to_i(16)
# => 39

Perl

Perlのスカラには文字列か数字かの区別はなく、数字を前提とした演算子に文字列のスカラを与えると数字として振舞おうとするので、明示的に変換する必要はない。その代わり比較演算子などは数字と文字列とで別々の演算子になっている。

16進数表記の文字列を数字に変換するには hex を使う。

print hex("00A0");   # => 160
print hex("0x00A0"); # => 160

0x または 0X で始まる文字列の場合はその後続文字列を16進数表記とみなして変換する。

hex は16進数で許されない文字があると、その文字の前までの部分だけで16進数に変換し、エラーにはならない。

print hex("AG"); # => 10

hex 関数 | perldoc.jp
http://perldoc.jp/func/hex

JavaScript

parseInt(str, 10);

2つ目の引数の10は10進数で解釈することを指定している。

2つ目の引数を省略すると、文字列の内容に応じて自動で判断される。先頭が 0x または 0X で始まる場合は16進数として解釈される。それ以外で先頭が 0 で始まる場合は8進数として解釈される。

// 以下はブラウザによって挙動が違うかもしれない
console.log(parseInt("07"));  // => 7
console.log(parseInt("08"));  // => 0
console.log(parseInt("09"));  // => 0
console.log(parseInt("10"));  // => 10
console.log(parseInt("010")); // => 8
console.log(parseInt("0xa")); // => 10
console.log(parseInt("0a"));  // => 0
console.log(parseInt("a"));   // => NaN
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク