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
Dea*_*ing 29
C#只BigInteger构建它(在.NET框架4中).
是decimal足够的精度为你的任务是什么?它是一个128位数字,可以保持在±1.0×10 -28到±7.9×10 28范围内的值.
那么,除了使用支持 BigDecimal 的第三方库(如果存在)之外,没有简单的解决方法。就我而言,最简单的方法是采用十进制实现(例如来自 mono)并使用 BigInteger 类型重写它。在内部,在 mono 的实现中,十进制类型由三个整数组成。所以我认为这不会很难实施。但我不确定效率。然而,您应该首先考虑使用codeka提到的标准十进制类型。
有一个名为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中列出了其他此类图书馆
资料来源: