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

Rad*_*adi 45 c# java bigdecimal equivalent

BigDecimal是一个java.math包中的类,它具有处理大量特定规模的许多好处.c#中是否存在具有此功能的等效类或数据类型.

Gig*_*igo 43

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

然后,我完成了草案,以支持所有基本的算术和比较运算符,以及所有典型数值类型和一些指数方法的转换,这些都是我当时需要的.

它当然不全面,但非常实用,几乎可以随时使用.由于这是一夜编码的结果,我不能保证这个东西没有错误或完全准确,但它对我来说很有用.无论如何,我想在这里发布它,因为我没有找到任何其他方式在C#中使用任意精度小数,而不需要包含大量的库(大多数甚至不是.net,而是包装到c ++),这些都带有各种不必要的东西.

基本思想是使用BigInteger类型的.NET 4.0和基数10指数(Int32)构建具有任意大尾数的自定义浮点类型.

如果你发现错误/不准确,有建议或任何建设性的,请随时直接编辑我的帖子或留下评论,以便我可以改善答案.

我不完全确定这是否是放置此内容的最佳位置,但这是关于此主题的SO的最重要问题之一,我真的想分享我的解决方案.;)

编辑:我将实现移动到GitHubGist:https://gist.github.com/JcBernack/0b4eef59ca97ee931a2f45542b9ff06d

  • @jimbobmcgee首先我认为你是对的并且已经编辑了答案,但后来我再次意识到`BigDecimal`是一个结构.这意味着进入一元运算符的参数已经是原始的副本,这使得无法对其进行意外修改. (2认同)

Dea*_*ing 29

C#只BigInteger构建它(在.NET框架4中).

decimal足够的精度为你的任务是什么?它是一个128位数字,可以保持在±1.0×10 -28到±7.9×10 28范围内的值.

  • BigRational类也正在进行中.目前处于测试阶段 (4认同)

n53*_*535 5

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


Red*_*ode 5

有一个名为BigNum的C#库可以满足您的需求,在某些情况下还具有其他功能。

例如,它具有平方根函数,BigDecimal没有此函数:

PrecisionSpec precision = new PrecisionSpec(1024, PrecisionSpec.BaseType.BIN);
BigFloat bf = new BigFloat(13, precision);
bf.Sqrt();
Console.WriteLine(bf.ToString());
Run Code Online (Sandbox Code Playgroud)

Wikipedia在http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries中列出了其他此类图书馆

资料来源: