Хорошо, у меня есть char
, что является числом. Как я могу преобразовать его в double
?Преобразуйте символ, чтобы удвоить
char c;
Я попытался (double)c
, но он превращается в ноль.
Любые идеи?
Хорошо, у меня есть char
, что является числом. Как я могу преобразовать его в double
?Преобразуйте символ, чтобы удвоить
char c;
Я попытался (double)c
, но он превращается в ноль.
Любые идеи?
, если у вас есть нуль строку, которую вы хотите преобразовать в двойное использовании 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);
Обратите внимание, что «при успешном выполнении функция возвращает преобразованное целочисленное число как значение int». – Maroun
@ Maroun85 это 'atof' не' atoi' – iabdalkader
извините :) моя ошибка! – Maroun
для того, чтобы ответить на вопрос, который вы просили:
#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-подобную систему).
И как сказал Куди в комментарии, вам нужно уточнить свой вопрос. Пример с фактическим кодом облегчил бы выяснение того, что вы просите.
Вы хотите преобразовать ascii-код в 'double'? Сделайте свой вопрос более точным. – qwertz
@Aleksandar: 'atoi()' преобразует строку в 'int'; OP хочет «double». И не ясно, что он спрашивает; см. мой ответ. –