web-dev-qa-db-fra.com

Convertit une chaîne en nombre décimal dans ruby

J'ai besoin de travailler avec des nombres décimaux. Dans mon programme, l'utilisateur doit mettre un nombre avec des décimales pour convertir ce nombre.

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

# ARGV[0] is: 44.33

size = ARGV[0]

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

Tu appelles to_i, vous obtenez un entier.

Essayez d'appeler to_f, vous devriez avoir un flotteur.

Pour plus de méthodes de conversion de chaînes, regardez ici .

87
Sergio Tulentsev

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

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

MISE À JOUR:

Utilisez bigdecimal comme @ bigtex777 mentionné:

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

7
lucianosousa

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

require 'bigdecimal'
require 'bigdecimal/util'

size = ARGV[0]
size = size.to_d

cela devrait faire en sorte que le nombre imprimé devienne décimal, mais si vous voulez le rediffuser, mettez à nouveau ceci to_f

size=size.to_f

puts size
5
Tau-fan Ar-if

Les méthodes de conversion capitalisées sont un idiome bien établi Ruby. Voir ce superbe billet de Advi Grimm

Integer("641339524823408659")
=> 641339524823408659
1
MegaTux