文字列を数値に変換するには (parseInt / toInt) 2016/07/24
文字列を数値に変換する方法。
多くの言語では動的/静的の違いはあっても文字列と数値とで型が区別されるので、文字列から数値への変換が必要なことが多い。
逆の数値から文字列に変換する方法も参照。
C言語 / C++ 2015/06/11
atoi
関数を使う。
#include <stdio.h>
#include <stdlib.h>
int main() {
char *str = "10";
int i = atoi(str);
printf("%d\n", i);
/* => 10 */
}
Go言語 (golang) 2015/06/11
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
}
数値に変換できた場合は err
が nil
になり、できない場合は err
にエラーのオブジェクトが入る。
Java 2016/12/15
Signature:
int Integer.parseInt(String str)
int Integer.parseInt(String str, int radix)
int Integer.parseUnsignedInt(String str)
int Integer.parseUnsignedInt(String str, int radix)
例
// 10進数の文字列を整数に変換
int i = Integer.parseInt(str);
// 16進数の文字列を整数に変換
int i = Integer.parseInt(str, 16);
数値に変換できない文字列の場合は、java.lang.NumberFormatException
がスローされる。
文字列が "0"
で始まっていてもそれは単に無視されて変換されるので、
"010"
は 10
になる。
Scala 2016/12/15
Javaでの方法はそのままScalaでも使えるが、Scalaでは文字列のクラスに以下のメソッドが追加されているので、それを使ってもよい。
Signature:
def toByte: Byte
def toShort: Short
def toInt: Int
def toLong: Long
def toFloat: Float
def toDouble: Double
例
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 2014/03/29
// 整数への変換
(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 2014/01/23
# 10進数の文字列を整数に変換
int(str)
# 文字列を浮動小数点数に変換
float(str)
Ruby 2015/03/02
# 整数に変換
str.to_i
# 浮動小数点数に変換
str.to_f
16進数の文字列を整数にしたい場合は to_i
の引数に16を渡す。
p "27".to_i
# => 27
p "27".to_i(16)
# => 39
Perl 2015/02/15
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 2013/10/26
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