Я могу думать о решении, хотя оно не очень эффективно ...
Я предполагаю, что вы можете определить, когда число находится в "лучшем" читаемом человеком форматекогда дополнительные цифры не имеют значения для округления.
Например, при округлении 0,13999 до разного числа десятичных разрядов получается:
0
0.1
0.14
0.14
0.14
0.13999
Я бы предложилВы могли бы пройти через цикл и обнаружить этот стабильный патч и обрезать его там.
Этот метод, кажется, делает это:
public double CustomRound(double d)
{
double currentRound = 0;
int stability = 0;
int roundLevel = 0;
while (stability < 3)
{
roundLevel++;
double current = Math.Round(d, roundLevel);
if (current == currentRound)
{
stability++;
}
else
{
stability = 1;
currentRound=current;
}
}
return Math.Round(d, roundLevel);
}
Этот код может быть очищаем, но он выполняет свою работу и является достаточнымдоказательство концепции.:)
Я должен подчеркнуть, что это исходное допущение (отсутствие изменений при округлении) - это критерий, на который мы смотрим, что означает, что что-то вроде 0.3333333333 не будет округлено вообще.С приведенными примерами я не могу сказать, является ли это правильным или нет, но я предполагаю, что если это двойная проблема, то проблема заключается в очень незначительных отклонениях от «правильного» значения и значения в виде двойного.