2009-12-01 7 views
1

Я хочу проанализировать дробь, хранящуюся в строке (например, «2/13»), в двойную. Я могу написать код синтаксического анализа, но мой единственный вопрос - куда должен идти этот код. Лучше всего было бы, если бы я мог использовать функцию double.Parse() для этой цели. Можно ли это сделать? Если double.Parse() не может использоваться так, как это описано в написании метода расширения? Или любым другим способом?Разбор фракции до нуля

Я не хочу писать класс фракций, потому что преобразование из строкового представления дробной части в двойное будет одноразовой (когда пользователь сначала войдет в нее), а после этого строка фракции будет отброшена ,

ответ

6

«... после этого строка фракции будет отброшена».

Вы можете сделать класс фракций статическим, со статическим методом Parse, который берет строку и возвращает double.

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

использование:

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

Ничто не конкретизируется, ничего не отбрасывается ...

Этот подход предполагает, конечно, что вы не заботитесь, чтобы сохранить исходные значения (на основе ваше упоминание в г-м вопросе о том, что вы хотите «выбросить» значение строки, используемое для создания фракции).

Если вы хотите «удерживать» это состояние (начальные значения двух целых чисел, используемых для создания дроби), то отдельный нестатический класс (на самом деле структура может быть лучше в этом случае) было бы лучшим способом. Затем вы теряете точность, поскольку будущие арифметические операции с использованием экземпляров этой структуры могут быть закодированы для использования двух исходных точных значений интегрального состояния, хранящихся в этих полях, вместо немного менее точного округленного двойника, полученного вами от операции деления.

4

Невозможно переопределить double.Parse() с помощью метода расширения, но вместо этого вы можете создать метод расширения double.ParseFraction(). Это разумный способ сделать это.

+2

Такой метод должен быть статическим, и вы не можете создавать статические методы расширения. –

+0

Ах, действительно. Никогда даже не думал об этом ... – Thomas

Смежные вопросы