テキストの数値への変換
この例では、テキストを、それが表す数値に変換する方法を説明します。通常、このような変換を行う必要があるのは、プロットする数値や計算で使用する数値を表すテキストがある場合です。たとえば、テキストはテキスト ファイルまたはスプレッドシートから取得される場合があります。MATLAB® にインポートするときに数値に変換していない場合は、この例に示す関数を使用できます。
string 配列、文字ベクトル、および文字ベクトルの cell 配列を数値に変換できます。テキストは 16 進数値または 2 進数値を表すことができますが、数値に変換すると、10 進数値として保存されます。日付と時刻を表すテキストを datetime
値または duration
値に変換することもでき、これらを数値のように扱うことができます。
倍精度値
テキストから倍精度値への推奨される変換方法は、関数 str2double
を使用することです。文字ベクトル、string 配列、および文字ベクトルの cell 配列を変換できます。
たとえば、一重引用符を使用して文字ベクトルを作成し、それが表す数値に変換します。
X = str2double('3.1416')
X = 3.1416
入力引数が string 配列または文字ベクトルの cell 配列である場合、str2double
はこれを、同じサイズの数値配列に変換します。string は二重引用符を使用して作成できます。(string は string
データ型をもち、文字ベクトルは char
データ型をもちます。)
str = ["2.718","3.1416"; "137","0.015"]
str = 2x2 string
"2.718" "3.1416"
"137" "0.015"
X = str2double(str)
X = 2×2
2.7180 3.1416
137.0000 0.0150
関数 str2double
は、コンマ (3 桁ごとの区切りとして) と小数点を含むテキストを変換できます。たとえば、str2double
を使用して、以下の table の変数 Balance
を変換できます。Balance
は、コンマを 3 桁ごとの区切りとして使用して、数値を string として表します。
load balances
balances
balances=3×2 table
Customer Balance
_________ ___________
"Diaz" "13,790.00"
"Johnson" "2,456.10"
"Wu" "923.71"
T.Balance = str2double(T.Balance)
T=3×2 table
Customer Balance
_________ _______
"Diaz" 13790
"Johnson" 2456.1
"Wu" 923.71
str2double
がテキストを数値に変換できない場合、NaN
値を返します。
関数 str2num
はテキストを数値に変換することもできますが、推奨はされません。str2num
は関数 eval
を使用しますが、これが原因で、テキスト入力に関数名が含まれている場合に意図しない副作用が発生する可能性があります。このような問題を回避するには、str2double
を使用します。
代わりに、関数 double
を使用して string を倍精度値に変換することができます。入力が string 配列の場合、double
は、str2double
と同様に、同じサイズの数値配列を返します。ただし、入力が文字ベクトルである場合は、double
は個々の文字を、それぞれの Unicode® 値を表す数値に変換します。
X = double("3.1416")
X = 3.1416
X = double('3.1416')
X = 1×6
51 46 49 52 49 54
次のリストに、テキストを数値に変換する場合のベスト プラクティスをまとめます。
テキストを数値に変換する場合は、関数
str2double
を使用します。これは、string 配列、文字ベクトル、文字ベクトルの cell 配列を一貫して扱います。また、string 配列には関数
double
を使用することもできます。ただし、文字ベクトルは扱いが異なります。str2num
は回避してください。これは、意図しない結果をまねく可能性のある関数eval
を呼び出します。
16 進数値と 2 進数値
16 進数と 2 進数を、テキストとして、または "リテラル" として表すことができます。リテラルとして記述する場合は、接頭辞 0x
および 0b
を使用しなければなりません。テキストとして表現してから変換する場合は、接頭辞は使用できますが、必須ではありません。
たとえば、16 進数をリテラルとして記述します。接頭辞は必須です。
D = 0x3FF
D = uint16
1023
次に、同じ値を表すテキストを、関数 hex2dec
を使用して変換します。接頭辞は認識されますが、必須ではありません。
D = hex2dec('3FF')
D = 1023
D = hex2dec('0x3FF')
D = 1023
2 進数値を表すテキストを、関数 bin2dec
を使用して変換します。
D = bin2dec('101010')
D = 42
D = bin2dec('0b101010')
D = 42
日付と時刻
MATLAB では、日付と時刻を保存するため、またそれらを数値として扱うために、datetime
と duration
のデータ型が提供されています。日付と時刻を表すテキストを変換するには、関数 datetime
および duration
を使用します。
日付を表すテキストを datetime
値に変換します。関数 datetime
は、日付と時刻の多くの一般的な書式を認識します。
C = '2019-09-20'
C = '2019-09-20'
D = datetime(C)
D = datetime
20-Sep-2019
日付と時刻を表す配列を変換できます。
str = ["2019-01-31","2019-02-28","2019-03-31"]
str = 1x3 string
"2019-01-31" "2019-02-28" "2019-03-31"
D = datetime(str)
D = 1x3 datetime
31-Jan-2019 28-Feb-2019 31-Mar-2019
テキストを duration
値に変換する場合は、hh:mm:ss
または dd:hh:mm:ss
の書式を使用します。
D = duration('12:34:56')
D = duration
12:34:56
参考
bin2dec
| hex2dec
| str2double
| datetime
| duration
| double
| table