2016-11-18 109 views
1

我很困惑以下,希望我即將學習的東西。 當我運行下面的代碼:「1」如何超過50?

<% 
Response.Write "ss = ""1""<br/>" 
ss = "1" 
Response.Write "ii = 50<br/>" 
ii = 50 
Response.Write "ss >= ii " 
If ss >= ii Then Response.Write "True?" Else Response.Write "False" 
Response.Write "<br/>""1"" >= 50 " 
If "1" >= 50 Then Response.Write "True" Else Response.Write "False" 
%> 

它寫到:

ss = "1" 
ii = 50 
ss >= ii True? 
"1" >= 50 False 

MSDN says 如果操作數是一個數字和一個字符串比較是字符串被轉換爲一個雙並且進行數值比較。如果字符串無法轉換爲Double,則會引發InvalidCastException。

我使用的ASP版本5.8,版本號18525.

我並不需要一個解決方法,因爲我有一個,但我不知道是否有因爲它是一個容易犯的錯誤有原因的。

編輯:選擇正確的答案有一個評論與進一步的鏈接到詳細的2個比較之間的差異。

+0

實際上'版本5.8'可能是指VBScript版本。 – Lankymart

+2

[VBScript中整數和字符串比較衝突]的可能重複(http://stackoverflow.com/questions/40465831/integer-and-string-comparison-conflict-in-vbscript) – Lankymart

+0

使用'if CLng(x)> CLng (y)然後' – Zam

回答

6

您正在查看.NET的文檔,同時使用VBScript(它不是.NET語言)。引用VBScript語言參考,然後在將字符串與數字進行比較時,

數字表達式小於字符串表達式。

Source

的原因,你的第二if評估爲False是因爲the way VBScript treats variables and literals differently in comparisons。由於您有文字編號,文字字符串按照您的初始預期進行轉換。

+0

啊,是的,謝謝。這解釋了第一個比較,並且意味着它是正確的,但我認爲第二個比較錯了? – Banzivar

+0

@Banzivar這是因爲文字顯然被區別對待,出於與VB6向後兼容的原因。 [Eric Lippert的博客文章有一些細節](https://blogs.msdn.microsoft.com/ericlippert/2004/07/30/typing-hard-can-trip-you-up/)。 – TZHX

+0

顯然這只是一個在當時並不重要的bug。 - 已經在這裏介紹[A:VBScript中的整數和字符串比較衝突](http://stackoverflow.com/a/40466467/692942)。 – Lankymart