我需要将尾数和指数转换为十进制.
这是我编码的方式:
// long fIEld.Decimal.Mantissa// sbyte fIEld.Decimal.Exponentdecimal MDEntryPx = fIEld.Decimal.Mantissa * (decimal)(Math.Pow(10,fIEld.Decimal.Exponent));
fIEld.Decimal.Mantissa是整数
但是Math.Pow(10,fIEld.Decimal.Exponent)是双倍的,所以我担心在转换为十进制时我会丢失精度.
我应该为将产生十进制的整数类型编写自己的Pow函数吗?
你会建议什么?我关心性能,因为我称这个函数每秒数十万次!如此丑陋但快速的解决方案是非常需要的!
当我在这里工作时,我关心精确度.
这就是我刚刚编写的内容,但可能有人可以提出更好的建议:
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; }}解决方法 有 a constructor of
decimal
可以满足您的需求.但它使用十进制的内部表示,这与您的表示不同.对于具有负指数的数字,转换应该非常简单,因为您可以直接将其转换为构造函数的scale参数.但是有了正指数,我认为你需要自己进行乘法运算. 虽然我不知道它是否真的比你的代码更快.它的可读性肯定会低得多,因此您的解决方案可能会很好.
总结以上是内存溢出为你收集整理的c# – 将(长尾数)和(sbyte指数)转换为十进制全部内容,希望文章能够帮你解决c# – 将(长尾数)和(sbyte指数)转换为十进制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)