我在.NET(C#)中,我有一段基本上执行以下操作的代码:
decimal value = decimal.Parse(s);
long result = (long)(value * 10000M);
但是,我不能直接使用10000
,因为小数位数是可变的(在这种情况下,它存储为4
)。有没有办法可以使用此4
来10000M
?
我正在思考像Math.Pow
这样的东西,但它似乎不适用于小数类型。我还想到了一个在循环中进行乘法的简单函数,但是如果.NET框架中已存在某些东西,那么我宁愿使用它。
答案 0 :(得分:2)
我不喜欢使用Math.Pow,因为它使用通用数学方程,因此通常较慢(除非你使用的是小数指数,看起来你不是这样)。相反,我会写一个像这样的扩展方法:
public static long ToPower(this decimal val, int pow)
{
decimal ret = 1;
for(int i = 0; i < pow; i++)
ret *= val;
return (long)ret;
}
可以这样称呼:
myDecimal.ToPower(4);
编辑:我刚刚运行了一项测试来验证时间。对于50以上的任何整数幂,Math.Pow现在似乎比基本循环更快。时间很短,但是当我进行幂数学运算时,我经常进行大量计算。
如果您正在进行此计算几次,则除了Math.Pow之外不需要使用任何其他内容,因为性能变化很小。
答案 1 :(得分:1)
将它提升到电源后,将其强制转换为小数。
decimal value = decimal.Parse(s);
int power = 4;
long result = (long)(value * (decimal)Math.Pow(10, power));
答案 2 :(得分:0)
这是一种将小数提升为非负整数幂的简单方法。
public static decimal Pow( decimal x, int n )
{
if( n < 0 )
{
throw new ArgumentOutOfRangeException( "n" );
}
decimal result = 1;
decimal multiplier = x;
while( n > 0 )
{
if( ( n & 1 ) > 0 ) result *= multiplier;
multiplier *= multiplier;
n >>= 1;
}
return result;
}