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
# :(
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 .
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
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
Les méthodes de conversion capitalisées sont un idiome bien établi Ruby. Voir ce superbe billet de Advi Grimm
Integer("641339524823408659")
=> 641339524823408659