2009-07-15 10 views
1

Je suis actuellement en train d'arrondir un nombre flottant, mais je reçois un message d'erreur comme: méthode non définie round_to pour float 16,666667 .. et mon code pour arrondir estQuel type de type de données peut être arrondi?

option = [keys[count], (((o.poll_votes.count.to_f)/@general_poll.poll_votes.count.to_f)*100).round_to(1)] 

Et ce qui me suprises le plus est que J'ai utilisé ce code à plusieurs endroits et fonctionne très bien .. mais maintenant, il me donne des erreurs.

merci d'avance.

Répondre

4

La méthode round_to n'existe nulle part dans le noyau ruby. Il est très probable que cette fonctionnalité ait été incluse dans une bibliothèque que vous utilisiez auparavant, mais que vous n'ayez pas utilisée dans votre projet actuel. Après une recherche rapide, il semble que cette fonctionnalité soit incluse dans la bibliothèque Ruby Facets.

gem install facets 

Vérifiez cet article pour ajouter cette fonctionnalité vous: http://www.hans-eric.com/code-samples/ruby-floating-point-round-off/

FTA:

Avec un peu de rapiéçage de singe, nous pouvons ajouter arrondir personnalisée de méthodes à la classe de flotteur.

class Float 
    def round_to(x) 
    (self * 10**x).round.to_f/10**x 
    end 

    def ceil_to(x) 
    (self * 10**x).ceil.to_f/10**x 
    end 

    def floor_to(x) 
    (self * 10**x).floor.to_f/10**x 
    end 
end 

------------------ snip 8 < -------------------

+0

J'ai réalisé qu'il n'y avait rien dans la bibliothèque, pouvez-vous s'il vous plaît expliquer en détail comment je peux utiliser ce patch de singe? de toute façon merci pour la réponse. –

+0

La correction de singe est juste une façon de dire des méthodes d'ajout à une classe déjà définie. Si vous ajoutez ce code à votre projet, il étendra Float et les méthodes seront disponibles. J'ai vérifié la gemme des facettes et il semble qu'ils ont 2 méthodes round_to et round_at. round_at imite le code affiché ci-dessus .. désolé si cela a causé la confusion. –

+0

Dans mon application, j'ai dû supprimer le '.to_f' dans la ligne 3 après' (self * 10 ** x) .round' pour éviter les chiffres résiduels désagréables quand je 'round_to (5)' par exemple. 'Pente = -0.4123800000000001' – Marcos

Questions connexes