更新:我把我的版本放到了描述的结尾。
我需要将尾数和指数转换为十进制。这是我的代码:
// long field.Decimal.Mantissa
// sbyte field.Decimal.Exponent
decimal MDEntryPx = field.Decimal.Mantissa * (decimal)(Math.Pow(10, field.Decimal.Exponent));
field.Decimal.Mantissa
是整数,但是Math.Pow(10, field.Decimal.Exponent)
是双精度浮点数,所以我担心在转换为十进制时会丢失精度。我应该为整数类型编写自己的
Pow
函数以生成decimal
吗?您有什么建议?由于我每秒钟要调用这些函数数万次,因此我关心性能!因此,虽然丑陋但快速的解决方案非常受欢迎!
而且我关心精度,因为我正在处理货币。
这就是我刚刚编写的代码,但可能有人可以提出更好的建议:
class Util
{
private static readonly decimal[] posPow10 = {
1M,
10M,
100M,
1000M,
10000M,
100000M,
1000000M,
10000000M,
100000000M,
1000000000M,
10000000000M,
100000000000M
};
private static readonly decimal[] negPow10 = {
1M,
0.1M,
0.01M,
0.001M,
0.0001M,
0.00001M,
0.000001M,
0.0000001M,
0.00000001M,
0.000000001M,
0.0000000001M,
0.00000000001M,
};
public static decimal Pow(decimal mantissa, sbyte exponent)
{
decimal result = mantissa;
if (exponent >= 0)
{
result *= posPow10[exponent];
} else {
result *= negPow10[-exponent];
}
return result;
}
}