#c
#c
Вопрос:
Каков наилучший способ преобразования строки в таком формате, как «293.0000», в результат с плавающей запятой 2.93.
Кстати, можно ли также удалить десятичные дроби с помощью printf и получить результат 293
Комментарии:
1. Не могли бы вы немного уточнить. вы говорите, преобразовать строку в целое число 2.93? Это не целое число, если вы имеете в виду 293. Вы можете использовать atoi для преобразования строки в целое число. Затем вы можете распечатать это, используя %d в формате.
Ответ №1:
char *myNum = "293.0000";
double myDouble = atof(myNum);
int myInt = (int)myDouble;
myDouble /= 100;
printf("double: (%.2f) %f, int: %dn", myDouble, myDouble, myInt);
выходной сигнал:
double: (2.93) 2.930000, int: 293
Обратите внимание, что типы с плавающей запятой будут иметь точность, превышающую 2 десятичных знака. Когда вы их выводите, вам нужно ограничить это тем, что вы хотите.
Комментарии:
1. Я получаю этот результат double: (.22.930000) 2.930000, int: 293
2. Это связано с тем, что в ответе есть опечатка, она должна быть (%.2f) внутри инструкции printf.
3. Я собирался сказать, что
atof
преобразуется в float, а не в double. К счастью, я сначала посмотрел его;atof
возвращает double, а его нетatod
. Но всеato*()
функции страдают от отсутствия проверки ошибок.strto*()
Функции сложнее в использовании, но могут обрабатывать такие вещи, как"1.0e99999999999999"
и"hello"
.
Ответ №2:
Я предполагаю, что вы пытаетесь преобразовать строку «293.00000» в целое значение 293.
Это не самый быстрый способ, и вам нужна библиотека C (вы не можете использовать ее в пространстве ядра), но это чистый и простой подход:
float tmp;
long resu<
sscanf("293.00000", "%f", amp;tmp);
result = lrintf(tmp);