Coldfusion isNumeric(';100e00';)返回是,而lsisnumeric(';100e00';)返回否

Coldfusion isNumeric(';100e00';)返回是,而lsisnumeric(';100e00';)返回否,coldfusion,Coldfusion,我刚刚看到isNumeric('100e00')返回yes,而lsisnumeric('100e00')返回no 我检查了另一个十六进制数字(a、b、c、d),但它返回no 有人知道为什么它被认为是一个数值吗?100e00是一种科学符号,即:100*10^0或:100 <cfset string = "100e00"> <cfset numeric = val(string)> <cfoutput> values:<br /> string: #s

我刚刚看到
isNumeric('100e00')
返回
yes
,而
lsisnumeric('100e00')
返回
no

我检查了另一个十六进制数字(a、b、c、d),但它返回no


有人知道为什么它被认为是一个数值吗?

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>
和的功能与后者的区域设置意识略有不同

isNumeric()表示: “确定字符串是否可以转换为数值” (我的重点)

lsIsNumeric()表示: “确定字符串是否是数字的有效表示形式”


你看到细微的差别了吗?前者会试图将值强制为数字,而后者只会执行所告诉的操作:告诉您它是否为数字。

这可能是一种科学符号。将其转换为整数,或对其运行数字格式,然后查看得到的结果。这很有意义!感谢您的回复。您可以使用
formatBaseN(100e00,10)
将其评估为100
formattebasen(100e5,10)
将等于10000000。也适用于字符串
formattebasen('100e5',10)
仍然等于10000000。或者像Dan建议的numberformat('100e5')=10000000这样的数字格式,或者只使用
val()
。这更接近你在这种情况下的意图。不,val不计算指数。val('100e5')返回100,而不是10000000<代码>将字符串开头的数字字符转换为数字。Blimey。那会咬人的。好的,那么我们可以这样做:
'100e5'*1
。我只是不喜欢在这里利用
formatBaseN()
,因为您并没有真正进行基数转换,您只是利用了它在使用之前将
100e5
转换为一个数字的事实<代码>数字格式()更好,我想。
values:
string: 100e00
numeric: 100
isNumeric()
string: YES
numeric: YES
lsIsNumeric()
string: NO
numeric: YES