明示的な型変換(キャスト)の実践編。

数値から文字列の場合でも、文字列から数値の場合でも、コンピュータで扱うことのできる数の範囲には仕様的な上限があります。コンピュータが数として表現できる範囲は広大だけれども、無限ではなく有限。

数は扱う桁が大きすぎれば表現できる範囲内に丸められ、小数点以下の値も表現可能な範囲を越えた場合には暗黙的に丸められます。そしてキャストの場合も同じく、表現できる範囲が予め決められているため、特に数値から文字列化する場合には注意が必要です。

小数点以下の扱いをどうするかに注目しながら、変数の型変換を行なってください。

文字列から数値へ変換

realint64 などが利用できます。

var a = real( "1.1"); // 小数点以下を含めて数値化される
var b = int64("1.1"); // 整数化によって小数点以下は無視される
draw_text(x, y, a+b); // 結果は 2.10 と表示される
// 変換を int64 で統一した場合の結果は 2 となる

string_digits を使って文字列から数字だけを抽出することもできます。

var a = "prester.org 0120 cmon"
var b = string_digits(a);
var c = real(b);
draw_text(x, y, c); // 結果は 120

数値から文字列への変換

数値から文字列へ変換する場合にも、小数点以下をどう扱うかでキャストが異なります。

var a = string(pi);               // 3.14
var b = string_format(pi, 1, 10); // 3.1415926536

通常は string を使いますが、円周率を扱う数学定数である pi を使って試すと分かりやすい結果を得られます。

string を使ったキャストでは小数点以下が暗黙的に丸められるため 3.14 と表示されます。

string_format の方は文字列化する際に表現する範囲として桁を指定できるので、小数点以下で製作者の意図した結果を得られています。

どこまで厳密に文字列化するかを指定する必要がある場合には string_format を、それ以外の通常用途では string といった具合で使い分けをします。

参考 (YoYoGames):real

参考 (YoYoGames):string_digits

参考 (YoYoGames):string

参考 (YoYoGames):string_format

暗黙的型変換へ

Leave a Reply

Your email address will not be published. Required fields are marked *