10
votes

Comment convertir une fraction en float dans Ruby

J'ai une chaîne "1/16" Je veux le convertir pour flotter et le multiplier par 45 . Cependant, je ne reçois pas les résultats souhaités.

J'essaie dans script / console xxx

Comment puis-je obtenir le résultat souhaité de 2.81

image plus grande: J'ai une descente comme ceci: xxx

chaque fois que l'utilisateur sélectionne oz alors je veux la multiplier à 45

Donc, je fais: xxx


2 commentaires

Je ne peux pas. Je reçois une chaîne de soumettre un formulaire dans ma page HTML.


Je remarque que votre baisse implique des unités ainsi que des fractions. Vous voudrez peut-être essayer le gemme de rubis, qui gère les deux ... Github.com/olbrich/Ruby -units


3 Réponses :


12
votes

On dirait que vous allez avoir à analyser la fraction vous-même. Cela fonctionnera sur les fractions et les nombres entiers, mais pas des nombres mixtes (c'est-à-dire: 1½ ne fonctionnera pas.)

class String
  def to_frac
    numerator, denominator = split('/').map(&:to_f)
    denominator ||= 1
    numerator/denominator
  end
end

"1/16".to_frac * 45


1 commentaires

C'est une main courte rubis. Carte (&: Méthode) Fonctionne à Carte {| Obj | obj.method}



17
votes

Utilisez Rational

>> (Rational(*("1/16".split('/').map( &:to_i )))*45).to_f
=> 2.8125


2 commentaires

J'utiliserais cela car il conserve une précision maximale jusqu'à ce que vous puissiez convertir pour flotter.


Vous pouvez simplement faire (rationnel ("1/16") * 45) .to_f



10
votes

@farrel a eu raison, et puisque Ruby 1.9 inclut Rational et String a un TO_R -METHOD Les choses sont plus faciles: xxx

in 2.0 Il est devenu encore plus facile avec Un littéral rationnel: xxx


0 commentaires