2013-02-08 5 views
6

Właśnie widać, że isNumeric('100e00') zwrotów yes podczas gdy lsisnumeric('100e00') zwroty no.IsNumeric ('100e00') zwraca tak podczas lsisnumeric ('100e00') nie zwraca

Sprawdziłem kolejne cyfry heksadecymalne (a, b, c, d), ale one nie zwracają żadnych wartości.

Czy ktoś wie, dlaczego jest uważany za wartość liczbową jako 100e00?

+0

To prawdopodobnie naukowe notowanie. Prześlij go do liczby całkowitej lub uruchom format liczbowy i zobacz, co otrzymasz. –

Odpowiedz

10

100e00 jest notacji naukowej, a mianowicie: 100 * 10^0, czyli 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> 

ten wyjścia:

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

Funkcjonalność isNumeric() i lsIsNumeric() różnią się nieco poza locale- świadomość tego drugiego.

IsNumeric() stany to: "Określa, czy ciąg mogą być konwertowane do wartości liczbowej" (mój nacisk)

lsIsNumeric() stwierdza: „Określa, czy ciąg jest poprawna reprezentacja numeru "

Czy widzisz subtelną różnicę? ten pierwszy spróbuje wymusić wartość liczbową, podczas gdy druga robi to, co zostało powiedziane: mówi, czy jest to cyfra, czy nie.

+0

To ma sens! Dziękuję za odpowiedź. – Ander2

+0

możesz użyć 'formatBaseN (100e00,10)' do oceny tego na 100. 'formateBaseN (100e5, 10)' będzie równe 10000000. Działa również dla ciągów. 'formateBaseN ('100e5', 10)' nadal jest równe 10000000. Lub format liczbowy taki jak Dan zasugerował numberformat ('100e5') = 10,000,000 – Travis

+0

Lub po prostu użyj 'val()'. Co jest bliższe intencji tego, co chciałbyś zrobić w tym przypadku. –

Powiązane problemy