2017-03-29 37 views
2

爲什麼我的紅寶石給不正確的數字大小?數字是多少並不重要。輸出總是4的大小。那是什麼意思?我一直認爲它應該給出數字的位數。Ruby中的數字大小是什麼意思?

number = 14 
print number 
print "\n" 
print number.size 

輸出:

14 
4 

紅寶石版本

ruby 2.1.8p440 (2015-12-16 revision 53160) [i386-mingw32] 
+0

這將是非常有益的,如果你能告訴我們(甚至更好,但是在Ruby bug跟蹤器上提出了一個關於它的bug),那麼在這個方法的文檔中*特別*是不清楚的。這樣,Ruby開發人員可以改進文檔,爲未來的讀者帶來益處。 –

+2

數字是數量;它沒有數字。無論你如何表現,它都具有相同的價值;可以將其表示爲十進制,二進制,十六進制或甚至使用羅馬數字。它的價值仍然是一樣的。可以使用'number.to_s.length'輕鬆找到數字的位數(十進制表示)。即通過計算以十進制表示它所需的字符數(數字)。 'number.to_s(16).length'得到用於表示16位數值的位數。 – axiac

+0

它總是不是'4':'32.size#=> 8'和'(2 ** 128 ).size#=> 17' –

回答

7

我總是建議要檢查你不知道如何使用下列流程的方法:

  1. 檢查方法來自哪裏(使用Object#method):

    number.method(:size) 
    #=> #<Method: Fixnum#size> 
    
  2. 打開文檔並瞭解它爲Fixnum#size以及它是如何工作的。

    2.1如果您使用IRB,您可以運行help 'Fixnum#size',以獲得正確的文檔在控制檯 2.2如果您使用撬,您可以用show-doc Fixnum#size去(安裝pry-doc創業板第一)


在Ruby 2.1.8中定義了方法Fixnum#size

從紅寶石2.4啓動它在 Integer#size定義:

返回INT的機器表示的字節數。

+0

您也可以在IRB中輸入'help'Fixnum#size''。 – Stefan

+0

@Stefan酷!從來沒有使用它,因爲它不工作'pry' –

+1

@AndreyDeineko雖然你可以在'pry'中使用'show-doc Fixnum#size'。 –

3

你混淆了這兩種方法String#size

返回str的字符長度。

Fixnum#size

返回的fix機器表示的字節數。

14Fixnum類的對象,所以當你調用它size你所得到的數字的機器表示的字節數。

如果你想知道有多少個數字中有一個數字,你可以簡單地把它先轉換爲字符串,然後調用該size

14.to_s 
# => "14" 
14.to_s.size 
#=> 2 
12345.to_s.size 
#=> 5 
+1

或'12345.digits.size'在新的紅寶石。 – Stefan