2009-12-01 7 views
1

Je souhaite analyser une fraction stockée dans une chaîne (par exemple "2/13") en double. Je peux écrire le code d'analyse, mais ma seule question est où devrait aller ce code. Le mieux serait que je puisse utiliser la fonction double.Parse() à cette fin. Est-il possible de le faire? Si double.Parse() ne peut pas être utilisé comme il s'agit de l'écriture d'une méthode d'extension? Ou de toute autre manière? Je ne veux pas écrire une classe Fraction parce que la conversion de la représentation en chaîne de fraction en double va être une opération unique (quand l'utilisateur entre pour la première fois) et après que la chaîne de fraction sera rejetée .Analyse d'une fraction pour doubler

Répondre

6

"... après que la chaîne de fraction sera rejetée."

Vous pouvez rendre la classe de fraction statique, avec une méthode d'analyse statique qui prend une chaîne et renvoie un double.

public static class Fraction 
{ 
    public static double Parse(string inValue) 
    { 
     // code to parse string 
     // and return calculated value 
    } 
} 

utilisation:

double myvalue = Fraction.Parse("2/13"); 

Rien est instancié, rien est mis au rebut ...

Cette approche suppose bien sûr, que vous ne se soucient pas de conserver les valeurs d'origine (sur la base votre mention dans la question d'an que vous souhaitez "jeter" la valeur initiale de chaîne utilisée pour créer la fraction). Si, otoh, vous vouliez "conserver" cet état (les valeurs initiales des deux nombres entiers utilisés pour créer la fraction), alors une classe non statique séparée (en fait une structure pourrait être meilleure dans ce cas)) serait une meilleure façon d'y aller. Vous perdrez alors toute précision, car les opérations arithmétiques futures utilisant les instances de cette structure pourraient être codées pour utiliser les deux valeurs d'état intégral exactes originales stockées dans ces champs au lieu du double arrondi légèrement moins précis que vous avez obtenu de l'opération de division.

4

Il n'est pas possible de remplacer double.Parse() par une méthode d'extension, mais vous pouvez créer une méthode d'extension double.ParseFraction() à la place. Cela semble être une façon raisonnable de le faire.

+2

Une telle méthode doit être statique et vous ne pouvez pas créer de méthodes d'extension statiques. –

+0

Ah, en effet. Je n'ai jamais pensé à ça ... – Thomas

Questions connexes