Преобразование целого числа в двойное - PullRequest
0 голосов
/ 16 ноября 2011

Мне нужно определить стандартное отклонение набора входов. Это требует суммирования (каждый вход - среднее) ^ 2. У меня есть следующий код для этого (510 пример ввода для тестирования):

int testDiff = 510;       
console.printf("testDiff = %i \r\n",testDiff);

double testDiff_double = static_cast<double>(testDiff);
console.printf("testDiff_double = %d \r\n",testDiff_double);

double result = pow(static_cast<double>(testDiff),2);
console.printf("result = %d \r\n",result);

Однако этот код не генерирует ожидаемый вывод (260100). Если я печатаю значения, полученные на каждом этапе, я получаю следующее:

testDiff = 510
testDiff_double = 0
pow = 0

Почему не удается преобразовать целое число в двойное? Я использую static_cast, поэтому я ожидал ошибки во время компиляции, если была логическая проблема с преобразованием.

Примечание (хотя это не должно иметь значения): я запускаю этот код на микроконтроллере MBED.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

В функциях printf попробуйте использовать% f вместо% d.

2 голосов
/ 16 ноября 2011

Поскольку вы используете %d вместо %f для отображения значений с плавающей запятой.

1 голос
/ 16 ноября 2011

Вы должны использовать %f или %e или %E или %g для отображения двойного числа / числа с плавающей точкой.

со справочной страницы printf :

c   Character   
d or i  Signed decimal integer
e   Scientific notation (mantise/exponent) using e character
E   Scientific notation (mantise/exponent) using E character
f   Decimal floating point  
g   Use the shorter of %e or %f
G   Use the shorter of %E or %f
o   Unsigned octal
s   String of characters
u   Unsigned decimal integer
x   Unsigned hexadecimal integer    
X   Unsigned hexadecimal integer (capital letters)
p   Pointer address
n   Nothing printed. The argument must be a pointer to a signed int, where the number of characters written so far is stored.   
%   A % followed by another % character will write % to stdout.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...