2014-09-24 3 views
-1

При работе над довольно крупным проектом я заметил, что одна из моих функций, которая должна возвращать значение Long, либо возвращает Integer. Я воспроизвел ошибку в очень маленькой среде, думая, что это сделает проблему понятной для меня, но я все еще не вижу этой проблемы. Входной сигнал равен 1.123, а возвращаемое значение равно 1. Если я, например, вводю Long; 123.456, он вернется только 123. Что я не вижу?Функция C++ должна возвращать Long, возвращая значение Integer вместо

Source1.cpp

#ifndef HEADER_H 
#define HEADER_H 


using namespace std; 

class testClass 
{ 

private: 
    long m_testLong = 0.0; 

public: 

    long getTestLong(); 
    void setTestLong(long sn); 
}; 

#endif 

header.h

#include "Source1.cpp" 
#include <string.h> 

void testClass::setTestLong(long sn) 
{ 
    m_testLong = sn; 
} 

long testClass::getTestLong() 
{ 
    return m_testLong; 
} 

Source.cpp

#include <iostream> 
#include "Source1.cpp" 
#include "Header.h" 

using namespace std; 

int main(void) 
{ 

testClass *myClass = new testClass; 

cout << "Setting test long value using setTestLong function -- 1.123" << endl; 
myClass->setTestLong(1.123); 
long tempTestLong = 0.0; 
tempTestLong = myClass->getTestLong(); 
cout << tempTestLong << endl; 

system("Pause"); 
return 0; 
} 

ОК, так что ответ был болезненно прост. Раньше я не работал с длинными, но я думал, что знаю, кто они. Я этого не сделал.

Так долго и целые числа являются целыми числами, а тип, обозначенный как длинный, заставил меня предположить, что целое число не будет работать, и я проверил функцию с двойным из-за моего недоразумения. Спасибо за помощь!

+0

Вы должны прочитать основную документацию на языке, который вы пытаетесь использовать: http://en.cppreference.com/w/cpp/language/types – ach

+0

Да, я сделал быстрое предположение, что это неверно. В следующий раз, когда я нахожу ошибку, я прочитаю полную документацию на C++. – trueCamelType

+0

никто не ожидает, что вы прочитаете полную документацию на C++, но то, о чем вы спрашиваете, это ABC. – ach

ответ

2

В long и int типов интегральных типов, они могут содержать только целые числа, как 7 или 42.

Вы должны использовать float или double как тип, предпочтительно последний для увеличения дальности и точности. Это позволит вам хранить реальные цифры, такие как 3.141592653589 или 2.718281828459.

0

Long - целое число. Присвоение значения с плавающей запятой целому числу вызывает округление.

Вы хотите двойной или поплавок.

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