Difference between revisions of "Float/ja"
< Float
Jump to navigation
Jump to search
Naoya Bellic (talk | contribs) m |
|||
Line 16: | Line 16: | ||
== 例 == | == 例 == | ||
<div style="padding: 0.5em"> | <div style="padding: 0.5em"> | ||
< | <source lang="lsl2">float min = 1.175494351E-38; | ||
float max = 3.402823466E+38; | float max = 3.402823466E+38; | ||
float sci = 2.6E-5; | float sci = 2.6E-5; | ||
Line 26: | Line 26: | ||
float Infintity = (float)"inf"; //-- LSOで評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。 | float Infintity = (float)"inf"; //-- LSOで評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。 | ||
float NotANumber = (float)"nan"; //-- LSOで評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。 | float NotANumber = (float)"nan"; //-- LSOで評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。 | ||
</ | </source> | ||
</div></div> | </div></div> | ||
Line 33: | Line 33: | ||
<div style="padding: 0.5em"> | <div style="padding: 0.5em"> | ||
制限なしで、任意のfloatが有効かどうかを得たいなら、以下の関数は理想的です。 | 制限なしで、任意のfloatが有効かどうかを得たいなら、以下の関数は理想的です。 | ||
< | <source lang="lsl2">integer isValidFloat(string s) { return (string)((float)s) != (string)((float)("-" + llStringTrim(s, STRING_TRIM_HEAD))); }</source> | ||
次のものはより効率的ですが、有名な注意点があります。これらが問題でない場合、特にMonoにおいて、お勧めの選択肢です。 | 次のものはより効率的ですが、有名な注意点があります。これらが問題でない場合、特にMonoにおいて、お勧めの選択肢です。 | ||
<lsl>integer isValidFloat(string s) { return (float)(s + "1") != 0.0; }</ | <lsl>integer isValidFloat(string s) { return (float)(s + "1") != 0.0; }</source> | ||
'''警告''': | '''警告''': | ||
* LSO-LSLの科学的表記では、指数部を38より大きくできません(算術エラーを投げます)。Monoは<code>infinity</code>をサポートしており、影響を受けません。 | * LSO-LSLの科学的表記では、指数部を38より大きくできません(算術エラーを投げます)。Monoは<code>infinity</code>をサポートしており、影響を受けません。 | ||
* MonoとLSO-LSLの両方において、小数点以下第9位以降を含む文字列を扱っているとき、おかしな結果を見かけるかもしれません。LSLでのstringへのキャストでは小数点以下6桁まで丸められ、人間の手による入力はあまり正確でなくなり、そして、通常、あまりに小さい値はそんなに役に立たないということを思い出してください。 | * MonoとLSO-LSLの両方において、小数点以下第9位以降を含む文字列を扱っているとき、おかしな結果を見かけるかもしれません。LSLでのstringへのキャストでは小数点以下6桁まで丸められ、人間の手による入力はあまり正確でなくなり、そして、通常、あまりに小さい値はそんなに役に立たないということを思い出してください。 | ||
* "nan"、"inf"とそれらの負の値は、stringからキャストできる、特別なテキスト値です(どんな先頭の空白や末尾の文字でも)。変数がLSOで評価されるとき、それらの値は算術エラーを引き起こすでしょう。stringからfloatへのキャストによってユーザーデータを調べるなら、以下のコード(vStrDtaはあなたの変数名に置き換えてください)と[https://jira.secondlife.com/browse/SVC-6847 SVC-6847]を見てください。 | * "nan"、"inf"とそれらの負の値は、stringからキャストできる、特別なテキスト値です(どんな先頭の空白や末尾の文字でも)。変数がLSOで評価されるとき、それらの値は算術エラーを引き起こすでしょう。stringからfloatへのキャストによってユーザーデータを調べるなら、以下のコード(vStrDtaはあなたの変数名に置き換えてください)と[https://jira.secondlife.com/browse/SVC-6847 SVC-6847]を見てください。 | ||
** < | ** <source lang="lsl2">(float)llList2String( llParseStringKeepNulls( llToLower( llStringTrim( vStrDta, STRING_TRIM ) ), ["inf", "nan"], [] ), 0 )</source> | ||
</div></div> | </div></div> | ||
Revision as of 05:14, 25 February 2016
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
浮動小数点数データ型はIEEE-754形式の32ビット(単精度)の数値です。 小数点付きの数値を使いたいときはfloatを使用します。
表現できる範囲は1.175494351E-38 〜 3.402823466E+38です。
2.6E-5のような科学的表記で表現することができます。
関数が引数としてfloatを要求しているときに、数値が整数(例えば5)ならば、float(例えば5.0)として生成されるように.0を付加します。
二つの定数を除算するなら、float型として定義をしないと結果が丸められるでしょう。いっそのこと、電卓であらかじめ計算しておくと、サーバーの数サイクルを節約します。
例
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で評価されるなら、算術エラーを起こし、おそらく使えないでしょう。下の"警告"を見てください。
便利なスニペット
制限なしで、任意のfloatが有効かどうかを得たいなら、以下の関数は理想的です。
integer isValidFloat(string s) { return (string)((float)s) != (string)((float)("-" + llStringTrim(s, STRING_TRIM_HEAD))); }
次のものはより効率的ですが、有名な注意点があります。これらが問題でない場合、特にMonoにおいて、お勧めの選択肢です。 <lsl>integer isValidFloat(string s) { return (float)(s + "1") != 0.0; }</source> 警告:
- LSO-LSLの科学的表記では、指数部を38より大きくできません(算術エラーを投げます)。Monoは
infinity
をサポートしており、影響を受けません。 - MonoとLSO-LSLの両方において、小数点以下第9位以降を含む文字列を扱っているとき、おかしな結果を見かけるかもしれません。LSLでのstringへのキャストでは小数点以下6桁まで丸められ、人間の手による入力はあまり正確でなくなり、そして、通常、あまりに小さい値はそんなに役に立たないということを思い出してください。
- "nan"、"inf"とそれらの負の値は、stringからキャストできる、特別なテキスト値です(どんな先頭の空白や末尾の文字でも)。変数がLSOで評価されるとき、それらの値は算術エラーを引き起こすでしょう。stringからfloatへのキャストによってユーザーデータを調べるなら、以下のコード(vStrDtaはあなたの変数名に置き換えてください)とSVC-6847を見てください。
(float)llList2String( llParseStringKeepNulls( llToLower( llStringTrim( vStrDta, STRING_TRIM ) ), ["inf", "nan"], [] ), 0 )
関連項目
用語
- LSL Examples: Format Decimal