c# – 将(长尾数)和(sbyte指数)转换为十进制
发布时间:2020-12-15 21:32:37 所属栏目:百科 来源:网络整理
导读:upd将我的版本放在最后的描述中 我需要将尾数和指数转换为十进制. 这是我编码的方式: // long field.Decimal.Mantissa// sbyte field.Decimal.Exponentdecimal MDEntryPx = field.Decimal.Mantissa * (decimal)(Math.Pow(10,field.Decimal.Exponent)); fiel
upd将我的版本放在最后的描述中
我需要将尾数和指数转换为十进制. // long field.Decimal.Mantissa // sbyte field.Decimal.Exponent decimal MDEntryPx = field.Decimal.Mantissa * (decimal)(Math.Pow(10,field.Decimal.Exponent)); field.Decimal.Mantissa是整数 我应该为将产生十进制的整数类型编写自己的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参数.但是有了正指数,我认为你需要自己进行乘法运算.
虽然我不知道它是否真的比你的代码更快.它的可读性肯定会低得多,因此您的解决方案可能会很好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |