是否有用于十进制计算的库,尤其是Pow(decimal, decimal)
方法?我找不到任何。
只要有一个,它可以是免费的或商业的。
注意:我不能自己动手,不能使用for循环,不能使用Math.Pow
,Math.Exp
或Math.Log
,因为它们都会{{1} } s,我不能使用double
s。我不能使用系列,因为它与double
s一样精确。
答案 0 :(得分:45)
其中一个乘数是速率:1 /速率^(天/ 365)。
没有十进制幂函数的原因是因为使用decimal
进行计算是没有意义的。使用double
。
请记住,小数点是为了确保您可以对完全表示为 short 十进制数的值进行精确算术运算。对于rate
和days
的合理值,任何其他子表达式的值显然 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);