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

Min*_*wth 21 c# math decimal

需要能够在十进制数字上使用标准数学函数.准确性非常重要.double不是可接受的替代品.有没有图书馆允许这个?

编辑 我正在使用System.Decimal.我的问题是System.Math不起作用System.Decimal.

__PRE__

是否所有功能都不起作用 System.Decimal

Bri*_*Kay 15

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

如果您需要执行简单的数学运算,例如除法,则应使用System.Decimal.

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

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

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

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

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

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

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


Eri*_*ert 6

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

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

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

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

  • -1 我认为这个问题提供了足够的信息。他使用小数,并且希望在计算中使用内置的 .NET 类运算,但它们只接受双精度数。 (6认同)

Ram*_*ada 6

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

注意:这是我的库,其中还包含一些示例

  • 如果您打算推广自己的图书馆,请提供 [披露](https://meta.stackexchange.com/questions/229085/how-to-offer-personal-open-source-libraries/229091#229091)你写的。我假设您这样做是因为 GitHub 用户名与您的 SO 用户名匹配。举例说明如何完成 OP 想要的内容,而不仅仅是链接到您的库,这也会很有帮助。 (2认同)