Перевод нецелого числа - C#
Формулировка задачи:
Здравствуйте всем. У меня возникли сложности со следующей задачей
Дано действительное число с целой и дробной части N = cn-1 ... c0.dm-1 ... d0, где ci, dj - это цифры десятичной системы счисления. Перевести число N в шестнадцатиричную систему счисления с заданной точностью, вычислив k цифр дробной части числа. Получить ленту strN, которая задает запись числа N в этой системе счисления.
Пример: N = 17.17 (10) = 11 1B (16)
Подскажите, пожалуйста, алгоритм работы такой программы. Я только знаю как с целыми числами работать
Решение задачи: «Перевод нецелого числа»
textual
Листинг программы
static char[] Digits = "0123456789ABCDEF".ToCharArray(); static string GetString(decimal Number, int Base, int Precition = 15) { var output = new StringBuilder(); var sign = Number < 0 ? -1 : 1; var intPart = Math.Truncate(Number * sign); var fracPart = Number * sign - intPart; // Перевод целой части (цифры добавляем справа налево) do { output.Insert(0, Digits[(int)(intPart % Base)]); intPart = Math.Truncate(intPart / Base); } while (intPart > 0); // Знак if (sign == -1) output.Insert(0, '-'); // Перевод дробной части (цифры добавляем слева направо) output.Append('.'); while (Precition-- > 0 && fracPart > 0) { int digit = (int)Math.Truncate(fracPart *= Base); fracPart -= digit; output.Append(Digits[digit]); } return output.ToString(); } static void Main() { //decimal d = 1m/16 + 11m/(16*16*16); decimal d = 17.17m; Console.WriteLine(GetString(d, 16, 2)); Console.ReadLine(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д