求Double的小数位数我有一个Double值:doublea=4.5565;计算Double中小数位数的最简单方法是什么(在本例中为4)。我知道我可以转换为字符串并进行拆分并获得长度。但是有没有更简单的方法呢?没有简单的方法,特别是因为从数学上讲,数字可能比显示的数字多得多。例如,4.5565实际上存储为4.556499999999999772626324556767940521240234375(感谢harold的计算)。您不太可能找到解决此问题的有用方法。编辑你可以想出一些这样工作的算法:如果,当你计算十进制表示时,你在一行中找到一定数量的9(或零),你向上(或向下)到最后一个位置之前系列9s(或零)开始。我怀疑你会发现这条路比你想象的更麻烦。变种精度=0;变量x=1.345678901m;while(x*(decimal)Math.Pow(10,precision)!=Math.Round(x*(decimal)Math.Pow(10,precision)))precision++;精度将等于十进制值的有效位数(将x设置为1.23456000将导致精度为5,即使最初在文字中指定了8位)。这与小数位数成比例地执行。它只计算小数位数;您可以通过取Math.Log10(x)的整数部分来计算小数点左侧的位数。它最适合小数,因为它们具有更好的值精度,因此舍入误差更小。我认为字符串解决方案是最好的:((a-(int)a)+"").length-2写一个函数intCountDigitsAfterDecimal(doublevalue){boolstart=false;整数计数=0;foreach(varsinvalue.ToString()){if(s=='.'){start=true;}elseif(开始){count++;}}返回计数;如果需要,我可能会使用此代码,myDoubleNumber.ToString("R").Split('.')[1].Length这里“R”是往返格式说明符我们首先需要检查索引范围。我认为这可能是一个解决方案:privatestaticintgetDecimalCount(doubleval){inti=0;while(Math.Round(val,i)!=val)i++;返回我;}双val9=4.5565d;intcount9=getDecimalCount(val9);//result:4sorryforduplication-->https://stackoverflow.com/a/35238462/1266873STSdb论坛有一篇非常好的帖子:小数点后的数字。它总结了许多已知的实现-ToString()、10种方法的幂和其他更高级的方法。提供了比较测试,显示哪种方法最快。提供的解决方案适用于双精度和十进制类型。以上就是C#学习教程:求Double的小数点后的数字。分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
