Float/ja

From Second Life Wiki
< Float
Revision as of 16:11, 14 April 2011 by Naoya Bellic (talk | contribs)
Jump to navigation Jump to search

浮動小数点数データ型はIEEE-754形式の32ビット(単精度)の数値です。 小数点付きの数値を使いたいときはfloatを使用します。

表現できる範囲は1.175494351E-38 〜 3.402823466E+38です。

2.6E-5のような科学的表記で表現することができます。

関数が引数としてfloatを要求しているときに、数値が整数(例えば5)ならば、float(例えば5.0)として生成されるように.0を付加します。

二つの定数を除算するなら、float型として定義をしないと結果が丸められるでしょう。いっそのこと、電卓であらかじめ計算しておくと、サーバーの数サイクルを節約します。

<lsl>float min = 1.175494351E-38; float max = 3.402823466E+38; float sci = 2.6E-5; float sci_a = 2.6E+3; float sci_b = 2.6E3; float sci_c = 26000.E-1; float f = 2600; //floatへの暗黙の型変換 float E = 85.34859; float Infintity = (float)"inf"; //-- LSOで評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。 float NotANumber = (float)"nan"; //-- LSOで評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。 </lsl>

便利なスニペット

制限なしで、任意のfloatが有効かどうかを得たいなら、以下の関数は理想的です。 <lsl>integer isValidFloat(string s) { return (string)((float)s) != (string)((float)("-" + llStringTrim(s, STRING_TRIM_HEAD))); }</lsl>

次のものはより効率的ですが、有名な注意点があります。これらが問題でない場合、特にMonoにおいて、お勧めの選択肢です。 <lsl>integer isValidFloat(string s) { return (float)(s + "1") != 0.0; }</lsl> 警告:

  • LSO-LSLの科学的表記では、指数部を38より大きくできません(算術エラーを投げます)。Monoはinfinityをサポートしており、影響を受けません。
  • MonoとLSO-LSLの両方において、小数点以下第9位以降を含む文字列を扱っているとき、おかしな結果を見かけるかもしれません。LSLでのstringへのキャストでは小数点以下6桁まで丸められ、人間の手による入力はあまり正確でなくなり、そして、通常、あまりに小さい値はそんなに役に立たないということを思い出してください。
  • "nan"、"inf"とそれらの負の値は、stringからキャストできる、特別なテキスト値です(どんな先頭の空白や末尾の文字でも)。変数がLSOで評価されるとき、それらの値は算術エラーを引き起こすでしょう。stringからfloatへのキャストによってユーザーデータを調べるなら、以下のコード(vStrDtaはあなたの変数名に置き換えてください)とSVC-6847を見てください。
    • <lsl>(float)llList2String( llParseStringKeepNulls( llToLower( llStringTrim( vStrDta, STRING_TRIM ) ), ["inf", "nan"], [] ), 0 )</lsl>

関連項目

用語