J'ai une chaîne J'essaie dans Comment puis-je obtenir le résultat souhaité de image plus grande:
J'ai une descente comme ceci: p> chaque fois que l'utilisateur sélectionne Donc, je fais: p> "1/16" code> Je veux le convertir pour flotter et le multiplier par 45 code>. Cependant, je ne reçois pas les résultats souhaités. script / console code> p> 2.81 code> p> oz code> alors je veux la multiplier à 45 p>
3 Réponses :
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
C'est une main courte rubis. Carte (&: Méthode) CODE> Fonctionne à Carte {| Obj | obj.method} code>
Utilisez Rational
>> (Rational(*("1/16".split('/').map( &:to_i )))*45).to_f
=> 2.8125
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 code>
@farrel a eu raison, et puisque Ruby 1.9 inclut Rational et String a un in 2.0 Il est devenu encore plus facile avec Un littéral rationnel: p> TO_R CODE> -METHOD Les choses sont plus faciles:
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