преобразование строки с десятичными дробями в целое число

#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);