我有一个Double值:
double a = 4.5565;
Run Code Online (Sandbox Code Playgroud)
计算小数点后位数的最简单方法是什么(本例中为4).
我知道我可以转换为字符串并进行拆分并占用长度.但是有更简单的方法吗?
pho*_*oog 19
没有简单的方法,特别是因为在数学上说数字的位数可能远远超过显示.例如,4.5565实际上存储为4.556499999999999772626324556767940521240234375(感谢harold计算).你不太可能找到解决这个问题的有用方法.
编辑
你可以想出一些像这样工作的算法:如果,当你计算十进制表示时,你会连续找到一定数量的9(或零),你向上(或向下)到系列之前的最后一个位置. 9s(或零)开始了.我怀疑你会发现比你想象的更麻烦.
Kei*_*thS 14
var precision = 0;
var x = 1.345678901m;
while (x*(decimal)Math.Pow(10,precision) !=
Math.Round(x*(decimal)Math.Pow(10,precision)))
precision++;
Run Code Online (Sandbox Code Playgroud)
precision将等于十进制值的有效位数(设置x到1.23456000将导致精度为5,即使最初在文字中指定了8位数).这与小数位数成比例地执行.它仅计算小数位数; 你可以通过取Math.Log10(x)的整数部分来计算小数点左边的位数.它最适用于小数,因为它们具有更好的值精度,因此舍入误差更小.
小智 5
写一个函数
int CountDigitsAfterDecimal(double value)
{
bool start = false;
int count = 0;
foreach (var s in value.ToString())
{
if (s == '.')
{
start = true;
}
else if (start)
{
count++;
}
}
return count;
}
Run Code Online (Sandbox Code Playgroud)