使用C#中的System.Decimal进行数学运算?

需要能够在十进制数字上使用标准数学函数。 准确性非常重要double不是可接受的替代品。 是否有任何库允许这样做?

编辑我正在使用System.Decimal 。 我的问题是System.Math不能与System.Decimal

 System.Math.Pow System.Math.Log System.Math.Sqrt 

是否所有函数都不适用于System.Decimal

好吧, Double使用浮点数学,这不是你想要的,除非你正在为3D图形做三角测量。

如果你需要进行简单的数学运算,比如除法,你应该使用System.Decimal 。

来自MSDN: decimal关键字表示128位数据类型。 与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使其适用于财务和货币计算。

更新:经过一些讨论后,问题是你想使用Decimals,但System.Math只需要双打几个关键function。 遗憾的是,您正在使用高精度数字,并且由于Decimal为128位而Double仅为64,因此转换会导致精度损失。

显然有一些可能的计划使大多数System.Math处理Decimal,但我们还没有。

我搜索了一下数学库,我终于找到了一个现在删除的StackOverflow问题,其中TheVillageIdiot提到了以下库:

1) Mathdotnet ,一个用C#/ .Net编写的数学开源(MIT / X11,LGPL和GPL)库,旨在为符号代数和数值/科学计算提供一个独立的清晰框架。

2) 用于Microsoft®.NET应用程序的IMSL™C#数值库 (付费)

3) .NET的极限优化数学库

你没有给我们足够的信息来回答这个问题。

十进制和双精度都不准确。 当表示的数量恰好等于forms的一部分(x / 10 n )时,对于x和n的合适选择,小数的表示误差 为零 。 对于x和n的合适选择,当数量恰好等于forms的一部分(x / 2 n )时,双精度的表示误差为零。

如果您处理的数量不是该forms的分数,那么您将得到一些表示错误,句点。 特别是,你提到了平方根。 许多平方根都是无理数; 它们没有小数forms,因此任何使用分数的表示格式都会产生很小的错误。

你能更详细地解释一下你在做什么吗?

DecimalMath包含System.Math类中的所有函数,带有decimal参数类比

注意:它是我的库,还包含一些示例

使用十进制数据类型,它具有128位精度:

http://msdn.microsoft.com/en-us/library/364x0z75(v=vs.80).aspx