2012-05-17 141 views

回答

1

通常,前導0表示您想要在octal中解析該號碼。我希望0809實際上是一個錯誤條件;也許批處理語言沒有一個好的機制來表示輸入是不正確的?

1

08和09是非法的。在八進制中,7是最高的法定數字。零的前導數字表示以八進制表示的數字。

+1

好了,你還挺希望他們知道,前導零自動將意味着八進制(一我討厭C的錯誤特徵以及所有從它下降並犯下相同錯誤的語言)。 – Joey

5

延伸的sarnold和大衛·施瓦茨已經提供的答案...

我從來沒有見過,指出,如果支持八進制或十六進制數字,符號的任何文件。但是你的問題促使我做了一些測試,並確實支持SET/A支持的相同數字符號。

  • 任何不以0開頭的數字[0-9]都被解釋爲十進制。
  • 任何前綴爲0的數字[0-7]都被解釋爲八進制數。
  • 以0x或0X爲前綴的任何一組數字[0-9,A-F,a-f]都被解釋爲十六進制。

任何不符合上述任何3個數字符號的字符都視爲字符串。

如果比較的兩邊都是有效數字,則進行數字比較。

如果任一方不是有效的數字,則進行字符串比較。

07是一個有效的八進制符號具有7十進制值,它是不小於1

08和09的前綴爲0,但不是有效的八進制符號,所以字符串比較製成。任何以0開頭的字符串都將排序爲小於從1開始的字符串。

一些有趣的測試可確認支持八進制和十六進制符號。

if 0xA equ 10 echo ok 
if 011 equ 9 echo ok 

它是輕度有趣的是,在SET無效八進制或十六進制格式/ A陳述引發錯誤。但在IF語句中無效的八進制或十六進制符號不會引發錯誤。它只是強制字符串比較。

更新

有效的電話號碼可先於符號指示: - 或+

if +0xA equ +10 echo ok 
if -011 equ -9 echo ok