2015-07-29 4 views
1

Я делаю секундомер, и мне нужно вывести секунды так: «9.743 секунд».Преобразование секунд (часов) в десятичный формат

У меня есть время начала, время окончания и разность, измеренная в часах, и планировал достижение десятичной дроби, разделив разность на 1000. Однако, независимо от того, что я пытаюсь, он всегда будет выводиться как целое число. Вероятно, это что-то маленькое, я не замечаю, но я понятия не имею. Вот мой код:

#include "Stopwatch.h" 
#include <iostream> 
#include <iomanip> 
using namespace std; 
Stopwatch::Stopwatch(){ 
    clock_t startTime = 0; 
    clock_t endTime = 0; 
    clock_t elapsedTime = 0; 
    long miliseconds = 0; 
} 

void Stopwatch::Start(){ 
     startTime = clock(); 
} 
void Stopwatch::Stop(){ 
     endTime = clock(); 
} 
void Stopwatch::DisplayTimerInfo(){ 
    long formattedSeconds; 
    setprecision(4); 

    seconds = (endTime - startTime)/CLOCKS_PER_SEC; 
    miliseconds = (endTime - startTime)/(CLOCKS_PER_SEC/1000); 

    formattedSeconds = miliseconds/1000; 
    cout << formattedSeconds << endl; 

    system("pause");  
} 

Как я уже говорил, выход целое число. Предположим, что он рассчитан на 5892 такта: выход будет «5».

+0

Поскольку миллисекунд представляет собой целое значение в диапазоне от 0 до 999, деления, что на 1000 всегда будет давать 0 (и даже если вы сделали деление на операцию с плавающей запятой, присвоение дробного значения от 0 до 0,999 к целому числу всегда равно нулю). –

+1

Не полагайтесь на 'clock()', чтобы обеспечить разрешение в миллисекундах. Используйте функции таймера от ''. – paddy

ответ

2

Разделение между целыми числами по-прежнему является целым числом. Передайте один из ваших параметров деления на реальный тип (double или float) и назначьте другую переменную, которая является реальным типом.

double elapsedSeconds = (endTime - startTime)/(double)(CLOCKS_PER_SEC); 
cout << elapsedSeconds << endl; 
1

formattedSeconds =(double) miliseconds/1000;

это даст вам реальный номер выхода

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