C#中Java BigDecimal类的等价物是什么?

BigDecimaljava.math包中的一个类,对于处理大数量的特定比例有很多好处。 在这个特性中,c#中是否有相同的类或数据types?

C#只有BigInteger构build它(在.NET框架4中)。

decimal足够的精度为您的任务? 这是一个128位的数字,可以保存在±1.0×10 -28到±7.9×10 28范围内的数值。

就在最近我还需要在C#中的任意精度小数,并发现在这里发布的想法: https : //stackoverflow.com/a/4524254/804614

然后,我完成了草案,以支持所有基本的算术和比较算子,以及当时需要的所有典型数值types和一些指数方法的转换。

这当然不是全面的,但function非常强大,几乎可以立即使用。 由于这是一个晚上编码的结果,我不能保证这个东西没有缺陷或者完全确切,但是对我来说这很好。 无论如何,我想在这里发布,因为我没有find任何其他方式在C#中使用任意的精度小数,而不需要包括大量的图书馆(大多数甚至不包括.net,但包装到C ++),与各种不必要的东东。

其基本思想是使用.NET 4.0的BigIntegertypes和基本10指数(Int32)构build一个具有任意大尾数的自定义浮点types。

如果您发现错误/不准确,有build议或有build设性的,请随时直接编辑我的文章或留下评论,以便我可以改善答案。

我不完全确定这是否是放置这个东西的最佳位置,但这是关于这个话题的最重要的问题之一,我真的想分享我的解决scheme。 ;)

编辑:我把实施移到GitHubGist: https ://gist.github.com/JcBernack/0b4eef59ca97ee931a2f45542b9ff06d

那么,除了使用支持BigDecimal的第三方库(如果它们存在的话)之外,没有简单的解决方法。 最简单的方法,就我而言,是采取一个十进制实现(例如从单声道),并重写它使用BigIntegertypes。 在内部,在mono的实现中,十进制types由三个整数组成。 所以我不认为这会很难实施。 我不确定效率。 您应该首先考虑使用标准的十进制types作为codeka提到。

下面是一个C#库,它可以完成你正在寻找的东西,在某些情况下还有其他的function: http://www.fractal-landscapes.co.uk/bigint.html (或者在http://web.archive .org / web / 20110721173046 / http://www.fractal-landscapes.co.uk/bigint.html )。

例如,它有一个平方根函数,BigDecimal没有:

 PrecisionSpec precision = new PrecisionSpec(1024, PrecisionSpec.BaseType.BIN); BigFloat bf = new BigFloat(13, precision); bf.Sqrt(); Console.WriteLine(bf.ToString()); 

维基百科在http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries上有其他这样的库列表;

当问题最初发布时,这可能不是一种select,但在C#代码中使用BigDecimal一个非常简单的方法是通过NuGet安装IKVM.NET包:

 PM> Install-Package IKVM 

然后就像在Java中一样:

 using System; using java.math; namespace BigDecimalDemo { class Program { static void Main(string[] args) { int n = int.Parse(args[0]); Console.WriteLine(Factorial(n)); } static BigDecimal Factorial(int n) { return n == 1 ? BigDecimal.ONE : Factorial(n - 1).multiply(new BigDecimal(n)); } } } 

取决于你使用IKVM有多远,偶尔会遇到互操作性问题,但以我的经验来看,它对于这样的简单工作通常很有效。

Deveelmath

GitHub的:

https://github.com/deveel/deveel-math

作者GitHub:

Antonello Provenzano

支持:

  • BigComplex
  • BigDecimal的
  • BigMath
  • 合理的

如何安装它

从NuGet包pipe理控制台中select要安装库的项目,然后键入以下命令

 PM> Install-Package dmath