Decimales de precisión arbitraria en C #

Posibles duplicados:
Enteros grandes en C #
C # dígitos decimales significativos sin límite (precisión arbitraria) sin java

Leí la pregunta en decimales de precisión arbitrarios en C #? pero no tengo la biblioteca J #. Necesito una biblioteca para decimales de precisión arbitrarios con C #.

Gran decimal:

Big Int (si te gusta la solución de JD, o si quieres crear una clase de tipo racional / número racional. Eso, y de alguna manera me perdí que estuvieras buscando decimales, no ints):

Puede implementar el suyo basado en la clase BigInteger de .NET 4.0. Hice esto por diversión, solo multiplicación:

 public struct BigDecimal { public BigInteger Integer { get; set; } public BigInteger Scale { get; set; } public BigDecimal(BigInteger integer, BigInteger scale) : this() { Integer = integer; Scale = scale; while (Scale > 0 && Integer % 10 == 0) { Integer /= 10; Scale -= 1; } } public static implicit operator BigDecimal(decimal a) { BigInteger integer = (BigInteger)a; BigInteger scale = 0; decimal scaleFactor = 1m; while ((decimal)integer != a * scaleFactor) { scale += 1; scaleFactor *= 10; integer = (BigInteger)(a * scaleFactor); } return new BigDecimal(integer, scale); } public static BigDecimal operator *(BigDecimal a, BigDecimal b) { return new BigDecimal(a.Integer * b.Integer, a.Scale + b.Scale); } public override string ToString() { string s = Integer.ToString(); if (Scale != 0) { if (Scale > Int32.MaxValue) return "[Undisplayable]"; int decimalPos = s.Length - (int)Scale; s = s.Insert(decimalPos, decimalPos == 0 ? "0." : "."); } return s; } } 

 decimal d1 = 254727458263237.1356246819m; decimal d2 = 991658834219519273.110324m; // MessageBox.Show((d1 * d2).ToString()); // OverflowException BigDecimal bd1 = d1; BigDecimal bd2 = d2; MessageBox.Show((bd1 * bd2).ToString()); // 252602734305022989458258125319270.5452949161059356 

Siempre existe el envoltorio GNU MP para .NET siempre que no te importe usar el GMP .