2011-03-05 1726 views
8

我想製作一個郵政編碼數組。什麼是非法八進制數字?

array = [07001, 07920] 

這將返回:

array = [07001, 07920] 
       ^
    from (irb):12 
    from :0 

之前從來沒有見過這個。任何解決方法?

回答

18

Ruby正在將具有前導0的數字解釋爲八進制數(基數8)。因此數字8和9是無效的。

它可能更有意義存儲郵政編碼爲字符串,而不是作爲數字(以避免與每當你顯示它零板),因爲這樣的:array = ["07001", "07920"]

+6

您第一次嘗試將加拿大郵政編碼添加到字段中時,您還將欣賞這些字符串。 – jdl 2011-03-05 19:54:33

3

你的陣列是一個數字,所以前導零導致它被解釋爲八進制(有效數字0-7)。如果這些是郵政編碼,並且前導零很重要,那麼它們應該是字符串。

3

0開頭的數字被假定爲八進制格式,就像以0x開頭的數字被假定爲十六進制格式一樣。八進制數字只從07,因此9在八進制數字中不合法。

最簡單的解決方法是簡單地寫十進制格式的數字:07001八進制數與十進制數中的3585相同(我認爲)。還是你的意思是用十進制來寫數字?然後,最簡單的解決方法是取消前導零:07001總是與7001相同。

但是,您提到您需要一系列郵政編碼。在這種情況下,正確的解決方案是使用一系列郵政編碼而不是整數數組,因爲郵政編碼不是整數,而是郵政編碼。