2013-02-08 25 views
6

Tôi vừa thấy rằng isNumeric('100e00') trả về yes trong khi lsisnumeric('100e00') trả về no.isNumeric ('100e00') trả về có trong khi lsisnumeric ('100e00') trả về không

Tôi đã kiểm tra một số thập lục phân khác (a, b, c, d) nhưng không trả về số nào.

Có ai biết tại sao nó được coi là 100e00 dưới dạng giá trị số không?

+0

Đây có thể là một ký hiệu khoa học. Đúc nó vào một số nguyên, hoặc chạy một định dạng số trên nó và xem những gì bạn nhận được. –

Trả lời

10

100e00 là ký hiệu khoa học, tức là: 100 * 10^0, hoặc: 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> 

này kết quả đầu ra:

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

Chức năng của isNumeric()lsIsNumeric() khác nhau đôi chút ngoài locale- nhận thức về sau này.

IsNumeric() tiểu bang này: "Xác định xem một chuỗi có thể được chuyển đổi sang một giá trị số" (nhấn mạnh của tôi)

lsIsNumeric() khẳng định: "Xác định xem một chuỗi là một đại diện hợp lệ của một số "

Bạn có thấy sự khác biệt tinh tế không? trước đây sẽ cố gắng buộc giá trị là một số, trong khi sau đó chỉ làm những gì nó nói: cho bạn biết nếu nó là một số hay không.

+0

Điều đó có ý nghĩa! Cảm ơn bạn đã phản hồi. – Ander2

+0

bạn có thể sử dụng 'formatBaseN (100e00,10)' để đánh giá rằng đến 100. 'formateBaseN (100e5, 10)' sẽ bằng 10000000. Làm việc cho chuỗi là tốt. 'formateBaseN ('100e5', 10)' vẫn bằng 10000000. Hoặc định dạng số như Dan đề xuất định dạng số ('100e5') = 10.000.000 – Travis

+0

Hoặc chỉ sử dụng 'val()'. Đó là gần gũi hơn với ý định của những gì bạn đang cố gắng làm trong trường hợp này. –

Các vấn đề liên quan