strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用) - AWK
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
指定された文字列を、数値に変換します。o 数字の前にゼロが付いている時、8進数として解釈します。
o 8進数や16進数の場合、正の整数部分だけを変換します。
**** 書式
--------
strtonum( 変換したい値 )
--------
o この関数は、Gawkの拡張機能です。
o 変換したい値 -- 数値に変換したい文字列(例:"39.39だよ")
+ 先頭が 0(= 数字のゼロ)で後ろに数字が続く時、8進数であると解釈します。
+ 先頭が 0x もしくは 0X で後ろに数字が続く時、16進数であると解釈します。
o 戻り値 -- 変換結果
**** 使用例
--------
BEGIN {
print strtonum("39.3"); # 39.3
print "# 以下、計算結果の確認です。";
print strtonum("-39.3aaa"); # -39.3
print strtonum("012"); # 8進数 = 8 + 2 = 10
print strtonum("0x12"); # 16進数 = 16 + 2 = 18
print strtonum("0X12"); # 16進数 = 16 + 2 = 18
print strtonum("Mikusan"); # 0
}
--------
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
**** 機能
o 文字列から数値に変換します。
o 8進数や16進数の場合、正の整数部分だけを変換します。
o 先頭が 0 (= 数字のゼロ)で後ろに数字が続く時、8進数と解釈します。
+ 例えば、「012」は 8進数、「0.12」や「-012」は10進数と解釈します。
o 先頭が 0x もしくは 0X で後ろに数字が続く時、16進数と解釈します。
+ 例えば、「0x12」は 16進数、「-0x12」や「0x-12」は 10進数と解釈して0になります。
o その他の場合、10進数と解釈します。
o 実数を指定すると、6桁までに丸めたり、浮動小数点形式になります。
+ この動作を変えたい時は、変数 CONVFMTを使います。詳しくは、「数値から文字列にする時に、実数を7桁以上表示させる方法」
o 数値の後ろに文字列が続いていても大丈夫です。
o 先頭に数値以外の文字がある場合
+ 半角空白は読み飛ばし、10進数と解釈します。
+ それ以外の文字があると、0 を返します。
o この機能をサポートしていない処理系があります。
** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
+ Gawk on Windows 3.1.7
+ Gawk for Windows 3.1.6
o この関数で変換した結果についてです。
o 数値の有効桁数は、15桁程度です。C言語のdouble型に依存しています。
o 整数の値を18桁以上表示する時、処理系毎に表示形式が異なります。
+ 常に整数表示、かつ誤差をそのまま残す処理系 = Gawk for Windows 3.1.6
+ 常に整数表示、かつ、およそ18桁目以降を0で埋める処理系 = Gawk on Windows 3.1.7と
**** メモ
o Gawk以外の処理系の場合、10進数については、文字列の後ろに「+ 0」をつける事で数値化出来ます。
+ 文字列を実数に変換する時、6桁までに丸めたりしますので、必要に応じて変数 CONVFMTを使います。
**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3 -- 非対応
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応
==
関連ページ:
▼AWKの数値計算関数と関連機能(▼ABC順)
▼AWKの文字列操作関数と関連機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> sqrt = 平方根を求める
sin = 正弦を求める
> split = 文字列を分割する
sprintf = 文字列を組み立てる
+
int = 実数や文字列を整数化する
(2010年9月5日変更。表現の訂正。8進数と16進数の判定は、キーワード 0 0x 0Xの後ろに数字が続く事が条件)