2013-07-16 1 views
-1

Le résultat de sortiemanutention octal rubis avec un zéro

puts (030).to_i 

est 24 - grâce à la représentation octal de Ruby. Si 030 est un fixnum (et non une chaîne de caractères), existe-t-il un moyen de le convertir en 30?
(L'exécution de (030).to_s renvoie également '24'.)

+1

Ceci est quelque chose de très basique dans le document. – sawa

Répondre

6

Le numéro précédé d'un zéro est un nombre octal.

030 == 3 * 8 ** 1 + 0 * 8 ** 0 
+0

Ah. Merci. Quelle est la meilleure façon de faire face à un zéro de premier plan? Pour l'enlever? Ou y at-il une méthode de conversion qui le traitera comme 30? –

+0

Si '030' est une chaîne, vous pouvez convertir en Fixnum par' '030'.to_i'. – falsetru

+1

'030' est interprété comme octal dans un certain nombre de langues, y compris JavaScript et les langages dérivés du C. – tadman

0

Vous devriez probablement prendre un coup d'oeil à la façon dont vous vous retrouvez dans une situation où vous devez convertir 030 à 30.

Si vous prenez tout type d'entrée utilisateur, vous avez probablement, au moment où vous recevez l'entrée d'utilisateur, commencez par une chaîne "030" puis appeler "030".to_i vous donnera le résultat souhaité de 30.

Il est probablement "plus propre" de fixer votre code pour utiliser la conversion de chaîne en int au lieu de finir avec un octal, puis de revenir à un entier en effaçant les 0 premiers.