Я предполагаю, что вы просто хотите отобразить эту переменную с десятичной точкой (возможно, переменная измеряет микросекунды, а вы хотите отобразить в секундах), а не манипулировать переменной с плавающей запятой (поскольку вы уже указали эту плавающую точкуоперации недоступны в пространстве ядра).
В этом случае не рассматривайте эту проблему как преобразование из длинного целого числа в число с плавающей запятой - вместо этого рассматривайте ее как проблему манипуляции со строками, особенно если ваш вводstrtol
- это строка.
В псевдокоде, если ваши входные и выходные данные являются отдельными строками:
void insertDecimalPoint(char const * strSrc, char * strDest, int maxlength)
{
1. find the length of strSrc
2. if length <= 6, then write a prefix of zeros like '0.000' to strDest
and then copy the source string to the destination
3. else, copy the first (length - 6) digits, then add a decimal point '.',
then copy the rest of the source to the destination.
}
В качестве альтернативы, если у вас есть ввод в виде длинного целого числа val
строка типа
whole = val / 1e6;
fraction = val - whole * 1e6;
printf("%d.%06d", whole, fraction);
будет делать правильные вещи.