我需要能够在十进制数上使用标准的数学函数。精度非常重要。 double
不是可接受的替代品。如何在 C# 中使用十进制数实现数学运算?
编辑:
我正在使用 System.Decimal
。我的问题是 System.Math
不能与 System.Decimal
一起使用。例如,以下函数不能与 System.Decimal
一起使用:
- System.Math.Pow
- System.Math.Log
- System.Math.Sqrt
我需要能够在十进制数上使用标准的数学函数。精度非常重要。 double
不是可接受的替代品。如何在 C# 中使用十进制数实现数学运算?
编辑:
我正在使用 System.Decimal
。我的问题是 System.Math
不能与 System.Decimal
一起使用。例如,以下函数不能与 System.Decimal
一起使用:
嗯,Double使用的是浮点数数学,除非你正在进行三维图形的三角函数计算之类的操作,否则不适用。
如果你需要进行简单的数学运算,比如除法,那么应该使用System.Decimal。
根据MSDN:decimal关键字表示128位数据类型。与浮点类型相比,decimal类型具有更高的精度和更小的范围,因此适用于金融和货币计算。
更新:经过一些讨论,问题在于您想使用Decimal进行计算,但System.Math仅接受Double进行几个关键功能的计算。不幸的是,您正在处理高精度数字,而由于Decimal是128位,而Double只有64位,所以转换会导致精度损失。
显然,有一些可能的计划使大多数System.Math处理Decimal,但我们还没有到达那里。
我在网上搜索了一些数学库,并编制了这个列表:
Mathdotnet是一个数学开源库(MIT/X11,LGPL和GPL),用C#/.Net编写,旨在为符号代数和数值/科学计算提供一个自包含的清洁框架。
DecimalMath是一个相对较新的库,它将自己宣传为:支持Microsoft忘记的Decimal和更多的便携式数学支持。听起来很有前途。
DecimalMath 包含了 System.Math
类中所有函数,但参数类型为 decimal
注意:这是我的库,里面还包含了一些示例。