What is the equivalent of the Java BigDecimal class in C#?
Какой эквивалент класса Java BigDecimal в C #?
BigDecimal это класс в java.math пакете, который обладает множеством преимуществ для обработки больших чисел определенного масштаба. Существует ли эквивалентный класс или тип данных в c # с этой функцией.
Переведено автоматически
Ответ 1
Совсем недавно мне также понадобилась десятичная дробь произвольной точности в C #, и я наткнулся на идею, опубликованную здесь: https://javalang.ru/a/4524254/804614
Затем я завершил черновик для поддержки всех основных арифметических операторов и операторов сравнения, а также преобразований ко всем типичным числовым типам и из них и нескольких экспоненциальных методов, которые мне были нужны в то время.
Он, конечно, не является всеобъемлющим, но очень функциональным и почти готовым к использованию. Поскольку это результат кодирования за одну ночь, я не могу гарантировать, что эта вещь не содержит ошибок или полностью точна, но у меня она отлично работала. В любом случае, я хочу опубликовать его здесь, потому что я не нашел никакого другого способа использовать десятичные дроби произвольной точности в C # без необходимости включать огромные библиотеки (в основном даже не .net, а оболочки для c ++), которые поставляются со всевозможными ненужными материалами.
Основная идея заключается в создании пользовательского типа с плавающей запятой с произвольной большой мантиссой, используя тип BigInteger из .NET 4.0 и показатель степени с основанием 10 (Int32).
Если вы обнаружите ошибки / неточности, у вас есть предложения или что-нибудь конструктивное, пожалуйста, не стесняйтесь напрямую отредактировать мой пост или оставить комментарий, чтобы я мог улучшить ответ.
Я не совсем уверен, что это лучшее место для размещения этой вещи, но это один из главных вопросов на SO по этой теме, и я действительно хочу поделиться своим решением. ;)
Только C # BigInteger построил его (в .NET framework 4).
decimal Достаточно ли точности для вашей задачи? Это 128-битное число, которое может содержать значения в диапазоне от ±1,0 × 10-28 до ±7,9 × 1028.
Ответ 3
Что ж, помимо использования сторонних библиотек с поддержкой BigDecimal (если они существуют), простых обходных путей не существует. Самый простой способ, насколько я понимаю, - это взять десятичную реализацию (например, из mono) и переписать ее, используя тип BigInteger . Внутренне, в реализации mono, десятичный тип состоит из трех целых чисел. Так что я не думаю, что это было бы сложно реализовать. Хотя я не уверен в эффективности. Однако сначала вам следует рассмотреть возможность использования стандартного десятичного типа, как упоминал codeka.
Ответ 4
Существует библиотека C # под названием BigNum, которая делает то, что вы ищете, и в некоторых случаях обладает дополнительной функциональностью.
Например, у него есть функция квадратного корня, которой нет у BigDecimal: