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

Max*_*AMM 34 .net c# math decimal

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

无论哪种方式,它都可以是免费的或商业的,只要有一种方式.

注意:我自己不能这样做,不能用于循环,不能使用Math.Pow,Math.Exp或者Math.Log,因为它们都采取doubles,而我不能使用doubles.我不能使用系列,因为它会像doubles 一样精确.

Eri*_*ert 46

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

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

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

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

  • @configurator:你的问题的答案是"是".您在问题后面的陈述在逻辑上不符合问题的答案.为什么有两倍的位数有助于解决财务问题,只需要精确到一分钱的十分之一?显然,问题在于复合日利息计算; 是否存在复杂的日常银行问题,在解决今天的利益时需要超过15位小数的精度?如果今天的利息是双倍的10.92857924858和十进制的10.9285792485820968039468095,这有关系吗? (2认同)
  • 当我处理复合日常利益时,我们要求精确到12位十进制数字,我个人觉得这是危险地接近'double`的限制.(不要紧,12位数字完全是任意的,"准确"意味着'与严重缺陷的旧VB3实现相同',所以我们需要引入计算错误......) (2认同)

小智 7

这是我用的.

output = (decimal)Math.Pow((double)var1, (double)var2);
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 是的,我一直这样做,直到结果超出小数位数的范围,并且最终出现溢出异常 (3认同)

小智 7

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