2015-06-22 47 views
-2

沒有特別的原因的時候,我想一個#reverse方法添加到Integer類:保持領先的零字符串轉換爲整數

class Integer 
    def reverse 
     self.to_s.reverse.to_i 
    end 
end 

puts 1337.reverse # => 7331 
puts 1000.reverse # => 1 

這個工程除了在0結束,數字精細如圖所示當1000.reverse返回1而不是0001。將字符串轉換爲整數時,有沒有辦法保持前導零?

+1

對不起,保持前導零的原因是什麼? – pasine

+1

這沒有意義。數字沒有「前導零」。特定基礎中的特定字符串表示可能具有或不具有前導零,但數字肯定不會。 –

回答

3

簡答:不,你不能。

2.1.5 :001 > 0001 
=> 1 

0001作爲整數沒有任何意義。在整數世界中,0001完全爲1.

此外,前導整數的數目通常是不相關的,除非需要填充某個整數用於顯示,但在這種情況下,您可能將其轉換爲另一種類型的對象(例如一個字符串)。

如果您想保留整數爲Fixnum,您將無法添加前導零。

真正的問題是:爲什麼你想要/需要前導零?您在問題中沒有提供這些信息。有可能有更好的方法來實現你的結果(例如,如果目標是正確格式化顯示結果的話,將值包裝到裝飾器對象中)。

+1

我需要保持前導零,因爲我在迴文數字上做了一些工作,但是如果不能保持前導零,那麼使用'to.s.reverse'會更容易。感謝實際上試圖回答我的問題,而不是質疑它:) – Nemo

0

self.to_s.to_i會將整數轉換爲字符串,並將此字符串「0001」轉換爲整數值。由於常規數字不需要前導零,因此它們被丟棄。換句話說:保持前導零對計算沒有意義,所以它們被丟棄。只要問問自己,如果前導零將被保留,整數1看起來將如何,因爲它代表一個32位數。如果您需要前導零,則無法繞過字符串。

但是10 + "0001".to_i返回11,所以你可能需要重寫String類的+方法。

+0

「,因此您可能需要重寫String類的+方法。」這絕對是一個非常糟糕的主意。 –

+0

通常也保持前導零,我想在特殊情況下這樣做會更容易。 – philipp

1

請問rjust是否適合您?

1000.to_s.reverse.to_i.to_s.rjust(1000.to_s.size,'0') #=> "0001" 
+0

'rjust'是一個String方法。你的例子中的結果是一個包含數值的String,它不是'Fixnum'。 –

+2

當OP需要保持前導零時,它只能是一個字符串,不是嗎? – Bala