Пишу класс для бесконечных чисел с плавающей точкой. Однако, конвертация в строку происходит неправильно. Сам код:
public string ToString(int precision) {
BigInteger remainder;
BigInteger result = BigInteger.DivRem(numerator, denominator, out remainder);
if (remainder == 0)
return result.ToString();
BigInteger decimals = (numerator * BigInteger.Pow(10, precision)) / denominator;
if (decimals == 0)
return result.ToString();
StringBuilder sb = new StringBuilder();
while (precision-- > 0 && decimals > 0) {
sb.Append(decimals % 10);
decimals /= 10;
}
return result + "." + new string(sb.ToString().Reverse().ToArray());
}
Дело в том, что после точки не дописываются нули, так, при делении 3/34 должно быть 0.0882..., но получается 0.882... Проблема, очевидно в этой строке:
BigInteger decimals = (numerator * BigInteger.Pow(10, precision)) / denominator;
Пожалуйста, подскажите как можно узнать сколько нулей должно быть и нормализовать вывод.
Уберите здесь одну проверку, из-за нее не добавляются нужные нули в конце:
while (precision-- > 0 /* && decimals > 0 */) {
sb.Append(decimals % 10);
decimals /= 10;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости