是否有Pow的数学API(十进制,十进制)

时间:2011-06-21 12:51:34

标签: c# .net math decimal

是否有用于十进制计算的库,尤其是Pow(decimal, decimal)方法?我找不到任何。

只要有一个,它可以是免费的或商业的。

注意:我不能自己动手,不能使用for循环,不能使用Math.PowMath.ExpMath.Log,因为它们都会{{1} } s,我不能使用double s。我不能使用系列,因为它与double s一样精确。

6 个答案:

答案 0 :(得分:45)

  

其中一个乘数是速率:1 /速率^(天/ 365)。

没有十进制幂函数的原因是因为使用decimal进行计算是没有意义的。使用double

请记住,小数点是为了确保您可以对完全表示为 short 十进制数的值进行精确算术运算。对于ratedays的合理值,任何其他子表达式的值显然 not 将完全表示为短十进制值。您将要处理不精确的值,因此请使用专为快速计算稍微不精确的值而设计的类型,例如double。

以双打计算的结果将以一个或几个百分之一便士的方式消失。谁在乎? 稍后您将完成错误。双倍计算费率。一旦你有一个需要再次转换成货币的结果,将结果乘以一万,将其四舍五入到最接近的整数,将其转换为十进制,然后再将它除以一万,你'将结果精确到小数点后四位,这应该足以进行财务计算。

答案 1 :(得分:7)

这是我使用的。

output = (decimal)Math.Pow((double)var1, (double)var2);

现在我只是在学习,但这确实有效,但我不知道我是否可以正确解释。

我认为这样做是接受var1和var2的输入并将它们转换为double,以用作math.pow方法的参数。之后在math.pow前面有(十进制)将值返回到小数并将值放在输出变量中。

如果我的探索错误,我希望有人可以纠正我,但我所知道的是,它对我有用。

答案 2 :(得分:2)

嗯,这是维基百科页面,其中列出了当前的C#数字库。但TBH我不认为有很多小数的支持

http://en.wikipedia.org/wiki/List_of_numerical_libraries

一般来说,使用小数进行这种计算是不合适的。这是高精度的 - 但它也是低射程。正如MSDN文档所说,它是用于财务/货币计算 - 不幸的是,对POW的要求不高!

当然,您可能有一个特定的问题域需要超高精度,所有数字都在10(28) - 10(-28)之内。但在这种情况下,您可能只需编写自己的系列计算器,例如在问题评论中链接的系列计算器。

答案 3 :(得分:1)

我知道这是一个旧线程,但是我将其放在此处,以防有人在寻找解决方案时找到它。 如果您不想弄乱转换并拥有自己的自定义实现,则可以安装NuGet DecimalMath.DecimalEx并像DecimalEx.Pow(number,power)一样使用它。

答案 4 :(得分:0)

不使用decimal。请改用double。根据这个线程,Math.Pow(double,double)直接从CLR调用。

How is Math.Pow() implemented in .NET Framework?

以下是.NET Framework 4的内容(仅限2行)

[SecuritySafeCritical]
public static extern double Pow(double x, double y);

64位十进制在此32位CLR中不是本机的。也许在未来的64位框架上?

答案 5 :(得分:-11)

等等,是吗?为什么你不能使用双打?如果你正在使用整数或其他东西,你总是可以施放:

int a = 1;
int b = 2;
int result = (int)Math.Pow(a,b);