64 votes

Convertir une chaîne de caractères en nombre décimal en ruby

Je dois travailler avec des décimales. Dans mon programme, l'utilisateur doit mettre un nombre avec des décimales pour convertir ce nombre.

Le problème est que si j'essaie de convertir l'argument en un nombre, j'obtiens un nombre entier sans décimales.

# ARGV[0] is: 44.33

size = ARGV[0]

puts size.to_i
# size is: 44
# :(

95voto

Sergio Tulentsev Points 82783

Vous appelez to_i , vous obtenez l'entier.

Essayez d'appeler to_f Vous devriez obtenir un flotteur.

Pour plus d'informations sur les méthodes de conversion des chaînes de caractères, voir ici .

12voto

Tau-fan Ar-if Points 340

Si vous souhaitez une réponse plus précise avec le calcul pour éviter les bogues comme celui-ci https://www.codecademy.com/en/forum_questions/50fe886f68fc44056f00626c vous pouvez utiliser la conversion en décimales exemple :

require 'bigdecimal'
require 'bigdecimal/util'

size = ARGV[0]
size = size.to_d

Ceci devrait transformer le nombre imprimé en nombre décimal, mais si vous voulez le transformer à nouveau en nombre flottant, il suffit de mettre ce to_f à nouveau.

size=size.to_f

puts size

10voto

lucianosousa Points 1947

Vous pouvez également utiliser la classe décimale pour cela

a = '2.45'
Decimal(a) # => 2.45

UPDATE :

Utilisez bigdecimal comme l'a mentionné @bigtex777 :

source : http://ruby-doc.org/stdlib-2.2.2/libdoc/bigdecimal/rdoc/BigDecimal.html

1voto

MegaTux Points 612

Les méthodes de conversion en majuscules sont une pratique bien établie en Ruby. Voir cet excellent article d'Advi Grimm

Integer("641339524823408659")
=> 641339524823408659

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X