夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unity C#でString型の文字を解析してfloat型で返す。

本日はUnity C#の勉強わくです。

C#にはデータを扱う様々な型があります。

docs.microsoft.com

今回は

string  _number = "1234";

をfloat型で返すような処理をおこないます。

〇やりたかったこと

・HoloLens 2ように作っているテンキーで入力した数字をそのままfloat型のデータで扱いたい。

・1+1のような演算子込みの文字式の結果を(いずれ)2としてfloat(もしくはint)で扱いたい

redhologerbera.hatenablog.com

〇Single.Parse メソッド

通常string型をそのままfloat型として扱うことはできません。

f:id:Holomoto-Sumire:20200708094210j:plain

今回はSingle.Parseを使用しました。

docs.microsoft.com

    void Start()
    {
        string _sample = "1234";
        float _number = float.Parse(_sample);
    }

Unityで適当なスクリプトを作成してStart(){}に上のように記述しました。

float.Parse()でstring型をfloatとして返してくれます。

f:id:Holomoto-Sumire:20200708100444j:plain

これを応用して簡単な文字式を計算してみます。

   [SerializeField] List<string> _samplelist;

    // Start is called before the first frame update
    void Start()
    {
        string phrase = "123+456";
        string[] words = phrase.Split('+');

        foreach (var word in words)
        {
            _samplelist.Add(word);
        }
        float _number 1= float.Parse(_samplelist[0]);
        float _number2 = float.Parse(_samplelist[1]);
        float result = _number1 + _number2;
        Debug.Log(result);
    }

ここでは123+456というstring型の式を計算します。

一度123,456という二つのfloat型の変数に分け、それらを合成しています。

ここでは

string[] words = phrase.Split('+');

という一文で+という区切りで分けています。

Pharese.Split()は()内の条件で文字列を区切り部分配列を作成します。

docs.microsoft.com

       foreach (var word in words)
        {
            _samplelist.Add(word);
        }

foreach文で分離した文字式を配列の要素に追加しています。 これは123+456の場合[0]、[1]が、123+456+789の場合[0]、[1]、[2]の要素が入れられます。

        float _number1 = float.Parse(_samplelist[0]);
        float _number2 = float.Parse(_samplelist[1]);

number1,number2はそれぞれの123,456でぐぎった数字の文字列をfloat型に変換します。

        float result = _number1 + _number2;
        Debug.Log(result);

最後にこれらを加算しています。

これを実行すると次のようにLogがでます。

f:id:Holomoto-Sumire:20200708101506j:plain

2つの数の加算なので簡単にできましたが、3つの数やほかの加減積商がかかわってくるとさらに解析する仕組みが必要になりそうです。