BigDecimal
是java.math
包中的一个类,它具有处理大量特定比例的许多好处。使用此功能的c#中是否有等效的类或数据类型?什么是C#中的Java BigDecimal类的等价物?
回答
C#只有BigInteger
构建它(在.NET框架4中)。
是decimal
足够的精度为您的任务?它是一个128位的数字,可以保存的值在±1.0×10 -28至±7.9×10 。
BigRational类也在它的方式。目前正在测试中。 – 2012-08-08 20:57:04
@RaheelKhan你是指这个? https://msdn.microsoft.com/de-de/library/microsoft.solverfoundation.common.rational(v=vs.93).aspx – 2017-06-04 08:58:22
@JanusTroelsen不,他的意思是http://bcl.codeplex.com/发布/查看/ 42782 – MrCC 2018-01-13 18:36:42
那么,除了使用支持BigDecimal的第三方库(如果存在的话)之外,没有简单的解决方法。就我而言,最简单的方法是取一个十进制实现(例如单声道)并使用BigInteger类型重写它。在内部,在mono的实现中,十进制类型由三个整数组成。所以我认为这不会很难实施。虽然我不确定效率。但应首先考虑使用标准十进制类型codeka提到。
下面是一个C#库,它可以完成您正在寻找的任务,并且在某些情况下还具有其他功能: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
404:库不再可用? – Shlomo 2012-07-10 01:56:54
添加了archive.org链接。 – RedGreenCode 2012-09-03 21:16:32
链接已死,archive.org不保留源代码zip文件。 – kristianp 2012-09-08 09:32:14
其他此类库的名单就在最近,我还需要一个任意精度在C#中使用十进制数字,并发现在这里发布的想法:https://stackoverflow.com/a/4524254/804614
然后我完成了草案,以支持所有基本的算术和比较运算符,以及所有典型数值ical类型和一些指数方法,这是我当时需要的。
它当然不全面,但功能非常强大,几乎可以立即使用。由于这是一个晚上编码的结果,我不能保证这个东西没有缺陷或完全确切,但它对我很好。无论如何,我想在这里发布它,因为我没有发现任何其他方式在C#中使用任意精度小数,而不需要包含大量的库(大多数甚至不包括.net,但是包装到C++),这些库包含各种不必要的东东。
基本思想是使用.NET 4.0的BigInteger类型和基本10指数(Int32)构建任意大型尾数的自定义浮点类型。
如果您发现错误/不准确,有建议或任何建设性的,请随时直接编辑我的文章或留下评论,以便我可以改善答案。
我不完全确定这是否是放置此事的最佳位置,但这是关于此主题的最重要的问题之一,我非常想分享我的解决方案。;)
编辑:我提出的实施GitHubGist:https://gist.github.com/JcBernack/0b4eef59ca97ee931a2f45542b9ff06d
出色的工作!这对我的PI计算努力来说非常方便。 – vbocan 2013-02-21 09:49:07
这很好。我可能提出的一个建议不是否定一元'-'运算符中的尾数,而是为了不可变性返回一个带有否定尾数的新BigDecimal。否则,您可能会发现'BigDecimal x = 1.01,y = -x'具有'x == y == -1.01'的不良效果。 – jimbobmcgee 2014-11-27 18:47:47
@jimbobmcgee首先,我认为你是对的,并且已经在编辑答案,但后来我又意识到'BigDecimal'是一个结构体。这意味着进入一元运算符的论据已经是原始文件的副本,这使得不可能意外修改它。 – Gigo 2014-11-28 17:25:49
Deveel数学
GitHub上:
https://github.com/deveel/deveel-math
作者GitHub上:
支持:
- BigComplex
- 的BigDecimal
- BigMath
- 理性
- ...
如何安装它
从NuGet包管理控制台中,选择图书馆将安装的项目然后键入以下命令
PM> Install-Package dmath
我不会相信这个图书馆。我有一些情况,其中一个添加失败,出现“10的权力太大”的错误以及另一个使用BigDecimal的情况,其中0.5> 1e-20返回false – 2016-09-30 13:00:08
优秀的库 – user1018697 2017-12-20 14:36:27
这可能不是一个选项,当这个问题最初发布,但在你的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可以有偶尔的互操作问题偶然发现,但以我的经验来看,它对于这样简单的东西通常效果很好。
IKVM是将java代码引入C#项目的好工具,但为了引入一个相对简单的类,将整个Java类库添加到您的项目中似乎过分了。 – Sprotty 2017-01-25 12:43:39
- 1. 什么是Java Socket.getInetAddress()的C#等价物?
- 2. 什么是Java DecimalFormat的c#等价物?
- 3. 什么是C#中的Java类的等价物?
- 4. 什么是Java的类<X>类型的C#等价物?
- 5. C#中TreeBidiMap的等价物是什么?
- 6. 什么是C#中的vbNullChar等价物?
- 7. C#中memset的等价物是什么?
- 8. C#中bigint的等价物是什么?
- 9. 什么是InterruptedException(Java)的.NET等价物?
- 10. 什么是Java Stream.collect的Kotlin等价物?
- 11. 什么是ASP.NET Membership的Java等价物?
- 12. 什么是.NET TypeCode的Java等价物?
- 13. 什么是Debugger.Launch()的Java等价物?
- 14. 什么是PHP flush()的Java等价物?
- 15. 什么是ChrW(e.KeyCode)的C#等价物?
- 16. 什么是C?:operator的Ruby等价物?
- 17. 什么是CRT的C++等价物?
- 18. 什么是UINT32_MAX的C++等价物?
- 19. 什么是MsgWaitForMultipleObjects的C#等价物?
- 20. 什么是EventWaitHandle的Objective C等价物?
- 21. 什么是C++ typeid的Scala等价物?
- 22. 什么是Java中的'long'的Objective C等价物
- 23. 什么是C++中Java注释的最佳等价物?
- 24. 什么是Java中C#'var'关键字的等价物?
- 25. Java中静态{...}的c#等价物是什么?
- 26. Java中Calendar.get()方法的C#等价物是什么?
- 27. 什么是C#中LinkedHashSet(Java)的等价物?
- 28. Java中Double.NaN的Objective-C等价物是什么?
- 29. 什么是Java的“for(String currLine:allLines)”的C#等价物?
- 30. 什么是C++的积累或Groovy注入的Java等价物?
可能的重复[是否有C#中的BigFloat类?](http://stackoverflow.com/questions/10359372/is-there-a-bigfloat-class-in-c) – 2016-09-13 15:06:51