Я думаю, что вы не делаете все правильно, позвольте мне сказать, почему: scanf("%lf", &num1);
.
Здесь вы уже преобразуете ввод в удвоение ... так что вы не получите это "высокоточное сканирование", которое вы пытаетесь, потому что оно теряется в этом первом преобразовании.
Если вам нужны действительные десятичные числа, вы должны найти .
в строке ascii и преобразовать ее в и int там.
РЕДАКТИРОВАТЬ Я написал небольшую программу, вы это имели в виду?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int split_decimal(const char * in, int * intpart, unsigned int * decimals) {
char * dot = strchr(in, '.');
if (!dot) {
*intpart = atoi(in);
*decimals = 0;
return 0;
}
*decimals = atoi(dot+1);
*intpart = atoi(in);
return 0;
}
int main(int argc, char ** argv) {
int intpart;
unsigned int decimals;
split_decimal("-1.337", &intpart, &decimals);
printf("%d.%d\n", intpart, decimals);
split_decimal("50", &intpart, &decimals);
printf("%d.%d\n", intpart, decimals);
return 0;
}
Выход:
-1.337
50.0