С# Печать рационального числа с высоким разрешением

У меня следующая загадка. В С# я хочу сохранить рациональное значение и получить строковое представление его десятичной записи.

Обычно я бы просто использовал float или double для хранения числа и получения строки, но мне бы хотелось десятичную запись с высоким разрешением. Тип данных double дает в лучшем случае около 16 символов в строковом представлении. Я ищу строковое представление десятичной записи, содержащее гораздо больше символов, около 30-50 было бы идеально. Мне нужно «высокое разрешение», чтобы проверить повторяющиеся подпоследовательности.

Рациональное число может быть простым, но я бы хотел, чтобы строковое представление было очень подробным.

Пример: 1/7 => 0.1428571428571428571428571428

Мой вопрос: существует ли структура данных C# в библиотеках .NET, которая будет хранить и печатать рациональные числа, как я описал выше?


person recursion.ninja    schedule 28.08.2012    source источник
comment
BigDecimal   -  person elyashiv    schedule 28.08.2012
comment
@elyashiv, это похоже на класс Java. Это вопрос С#.   -  person Sam    schedule 05.12.2013


Ответы (2)


сайт CodePlex библиотеки базовых классов содержит тип BigRational, который предоставляет "тип рациональных чисел произвольной точности". Это должно обеспечить желаемую детализацию и точность.

person Reed Copsey    schedule 28.08.2012
comment
Я немного новичок в C#, я скачал библиотеку BigRational и сослался на файл BigRationalLibrary.dll в своей IDE. Я не знаю, как включить библиотеку с оператором using. Что такое пространство имен BigRationalLibrary? - person recursion.ninja; 28.08.2012
comment
Документация — ваш друг. - person mbm; 28.08.2012
comment
@awashburn Вы бы добавили using Numerics; - person Reed Copsey; 28.08.2012
comment
Я перепутал using System.Numerics; с using Numerics;. Мои разочарования теперь ушли! - person recursion.ninja; 30.08.2012
comment
Он также имеет некоторые известные ошибки. См. проблемы на сайте CodePlex. - person Sam; 05.12.2013
comment
Я только что попробовал это, и BigRational, похоже, даже не предоставляет метод форматирования числа с использованием десятичной записи. В примере в вопросе он отображает 1/7 как 1/7, и я не смог найти способ отформатировать его по-другому. - person Sam; 05.12.2013
comment
Кажется, он также доступен в NuGet: BigRationalLibrary. - person dharmatech; 04.08.2015

Единственная существующая работа, которую я смог найти с этой функциональностью, была класс Rational, предоставленный Кеном Джонсоном.

Вот пример для достижения того, что вы хотели:

[TestMethod]
public void FormatsAsDecimal()
{
    var oneSeventh = new Rational(1, 7);
    var oneSeventhAsDecimal = oneSeventh.ToString(EApproxmationType.DecimalPlaces, 28, true);
    oneSeventhAsDecimal.Should().Be("0.1428571428571428571428571428");
}
person Sam    schedule 05.12.2013