Je veux manipuler un très long nombre en utilisant Ruby. Mais lorsque j'imprime le numéro à l'écran, je ne récupère que quelques chiffres du numéro d'origine. Alors, comment puis-je obtenir tous les chiffres que je veux?
Voici mon code
x = Array.new
y = Float(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
puts y
#=> 14.2857142857143
Réponses:
2 pour la réponse № 1Le résultat que vous obtenez est juste un représentation visuelle d'un nombre flottant. Cependant, en interne, les ordinateurs utilisent un format (virgule flottante binaire) qui ne peut pas représenter avec précision un nombre tel que 0,1, 0,2 ou 0,3.
Peu importe le code que nous pouvons vous fournir, mais si unnumber a une représentation infinie, chaque tentative de le formater ou de l’afficher sous forme décimale finira par se terminer par un tour. Ce peut être 10 chiffres, 1000 chiffres ou même 100000000 chiffres, mais c’est toujours un tour.
Il est difficile de composer avec les nombres décimaux. Selon votre objectif, vous souhaiterez peut-être:
- envisager d'utiliser BigDecimal (BigDecimal fournit un support similaire pour les nombres très grands ou très précis) ou
- en cas de manipulation d'argent. vous pouvez représenter les valeurs sous forme d'entiers et manipuler des entiers. Divisez le nombre entier par le nombre de centimes juste pour le formatage
Voici un exemple d'utilisation BigDecimal
require "bigdecimal"
x = []
y = BigDecimal(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
puts y
# => 0.14E2
puts y.to_i
# => 14
puts y.to_f
# => 14.0
0 pour la réponse № 2
Voici ce que je ferais en exigeant la bibliothèque standard mathn
:
require "mathn"
x = Array.new
y = Float(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
y # => 14.285714285714285
y.round(7) # => 14.2857143
y.round(9) # => 14.285714286
y.round(13) # => 14.2857142857143