2012-11-16 7 views
9

Хорошо, у меня есть char, что является числом. Как я могу преобразовать его в double?Преобразуйте символ, чтобы удвоить

char c; 

Я попытался (double)c, но он превращается в ноль.

Любые идеи?

+1

Вы хотите преобразовать ascii-код в 'double'? Сделайте свой вопрос более точным. – qwertz

+0

@Aleksandar: 'atoi()' преобразует строку в 'int'; OP хочет «double». И не ясно, что он спрашивает; см. мой ответ. –

ответ

26

, если у вас есть нуль строку, которую вы хотите преобразовать в двойное использовании atof:

const char *str = "3.14"; 
double x = atof(str); 
printf("%f\n", x); //prints 3.140000 

Если у вас есть один символ, литье должно работать:

char c = 'a'; //97 in ASCII 
double x = (double)c; 
printf("%f\n", x); //prints 97.000000 

Если символ равен нулю, то он, конечно, печатает нули:

char c = '\0'; 
double x = (double)c; 
printf("%f\n", x); //prints 0.000000 

Примечание: atof и подобные функции не обнаруживают переполнения и возвращают ноль при ошибке, поэтому нет способа узнать, не удалось ли он (не уверен, что он устанавливает errno), см. Также комментарии Кита о неопределенное поведение для определенных значений, так дело в том, вы должны использовать strtol для преобразования из строки в int и strtod для преобразования double тех, имеют гораздо лучшую обработку ошибок:

const char *str = "3.14"; 
double x = strtod(str, NULL); 
+0

Обратите внимание, что «при успешном выполнении функция возвращает преобразованное целочисленное число как значение int». – Maroun

+1

@ Maroun85 это 'atof' не' atoi' – iabdalkader

+0

извините :) моя ошибка! – Maroun

5

для того, чтобы ответить на вопрос, который вы просили:

#include <stdio.h> 
int main(void) { 
    char c = 42; 
    // double d = (double)c; The cast is not needed here, because ... 
    double d = c; // ... the conversion is done implicitly. 
    printf("c = %d\n", c); 
    printf("d = %f\n", d); 
    return 0; 
} 

char - целочисленный тип; его диапазон обычно равен -128 - +127 или 0 - +255. Он чаще всего используется для хранения значений символов, таких как 'x', но его также можно использовать для хранения небольших целых чисел.

Но я подозреваю, что вы действительно хотите знать, как преобразовать персонажу строку, как "1234.5", чтобы напечатать double с числовым значением 1234.5. Есть несколько способов сделать это.

Функция atof() принимает char*, которая указывает на строку и возвращает значение double; atof("1234.5")1234.5. Но это не делает реальной передачи ошибок; если аргумент слишком велик или не является числом, он может вести себя плохо. (Я не уверен в деталях этого, но я считаю, что его поведение в некоторых случаях не определено).

Функция strtod() делает то же самое и является гораздо более надежной, но более сложной в использовании. Обратитесь к документации вашей системы (man strtod, если вы используете Unix-подобную систему).

И как сказал Куди в комментарии, вам нужно уточнить свой вопрос. Пример с фактическим кодом облегчил бы выяснение того, что вы просите.

Смежные вопросы