Перевод из Double в строку символов - C (СИ)
Формулировка задачи:
Здравствуйте, не большие вопросы по коду. Смотрите ниже. Заранее спасибо.
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
char* dtoa(double _num, int _npos, int _prec)
{
int size = _npos + _prec + 2;
char* num = (char*)malloc(size);
int cel = int(_num); double ost = _num - cel;
num[_npos] = ',';
for (int i = _npos - 1; i >= 0; --i, cel /= 10) //что делает этот цикл, конкретно что такое 10 и что такое 48
num[i] = cel % 10 + 48;
for (int i = _npos + 1; i < size; ++i) {
num[i] = (int)(ost * 10) + 48;
ost *= 10;
ost -= int(ost);
}
num[size - 1] = '\0';
return num;
}
int main()
{
setlocale(LC_ALL,"Russian");
double _num=0;
int _npos, _prec;
printf("Введите число типа double:\n");
scanf("%lf", &_num);
printf("Введите кол-во знаков до запятой:\n");
scanf("%d", &_npos);
printf("Введите кол-во знаков после запятой:\n");
scanf("%d", &_prec);
printf("Результат:\n");
printf("%s\n", dtoa(_num, _npos, _prec));
}Решение задачи: «Перевод из Double в строку символов»
textual
Листинг программы
//что делает этот цикл, конкретно что такое 10 и что такое 48 for (int i = _npos - 1; i >= 0; --i, cel /= 10) num[i] = cel % 10 + 48;
Объяснение кода листинга программы
В данном коде выполняется перевод числа из типа double в строку символов.
- Создается цикл for, который начинается с _npos - 1 и выполняется до тех пор, пока i >= 0. Значение _npos - 1 равно типу double, в котором число цифр равно 10.
- Внутри цикла переменная cel делится на 10, что приводит к уменьшению числа на единицу.
- Результат деления (с остатком) записывается в переменную num с индексом i.
- К полученному результату добавляется 48, что приводит к переводу десятичных цифр в символы от '0' до '9'. Данный код выполняет перевод числа в строку, представляющую собой последовательность символов от '0' до '9', соответствующих его десятичным цифрам.