6

私はちょうどそれisNumeric('100e00')が戻るyeslsisnumeric('100e00')戻るのを見ましたno

別の16進数(a、b、c、d)をチェックしましたが、それらでnoが返されます。

なぜそれが100e00数値と見なされるのか誰かが知っていますか?

4

1 に答える 1

10

100e00科学的記数法です。つまり、100 * 10 ^ 0、または:100です。

<cfset string = "100e00">
<cfset numeric = val(string)>
<cfoutput>
values:<br />
string: #string#<br />
numeric: #numeric#<br />
<hr />
isNumeric()<br />
string: #isNumeric(string)#<br />
numeric: #isNumeric(numeric)#<br />
<hr />
lsIsNumeric()<br />
string: #lsIsNumeric(string)#<br />
numeric: #lsIsNumeric(numeric)#<br />
</cfoutput>

これは以下を出力します:

values:
string: 100e00
numeric: 100
isNumeric()
string: YES
numeric: YES
lsIsNumeric()
string: NO
numeric: YES

の機能とisNumeric()lsIsNumeric()、後者のロケール認識をわずかに超えて異なります。

isNumeric()は、次のように述べています。「文字列を数値に変換できるかどうかを判断します」(私の強調

lsIsNumeric()は次のように述べています:「文字列が数値の有効な表現であるかどうかを判断します」

微妙な違いがわかりますか?前者は値を強制的に数値にしようとしますが、後者は指示されたとおりに実行します。数値であるかどうかを通知します。

于 2013-02-08T13:12:54.373 に答える