为什么这个函数不输出小数

时间:2013-12-07 22:59:11

标签: c++

我有一个功能:

void LocalMax(vector<Station> Entry , int Size)
{
    int Highest1 = 0, Highest2 = 0, Highest3 = 0, Temp = 0, Highest = 0;
    double TempDouble;
    for (int i = 0; i < Size - 1; i++)
    {
        Temp = Entry[i].MaxTemp;
        if (Temp > Highest) {Highest = 0; Highest = Temp;}
        if (Entry[i].StationID != Entry[(i + 1)].StationID)
            {
                if (Entry[i].StationID == "GHCND:USC00083909") {Highest1 = Highest; Highest = 0;}
                if (Entry[i].StationID == "GHCND:USW00012888") {Highest2 = Highest; Highest = 0;}
                if (Entry[i].StationID == "GHCND:USR0000FCHE") {Highest3 = Highest;}
            } else if (Temp > Highest) {Highest = Temp; Temp = 0;}
        if (i == Size - 2) {Highest3 = Highest;}
    }
    TempDouble = Highest1 / 10;
    cout << "The highest temp recorded for Station1 was: " << Highest1 << " tenths of a degree Celsius \nor: " << TempDouble << " degrees Celsius." << endl;
    TempDouble = Highest2 / 10;
    cout << "The highest temp recorded for Station2 was: " << Highest2 << " tenths of a degree Celsius \nor: " << TempDouble << " degrees Celsius." << endl;
    TempDouble = Highest3 / 10;
    cout << "The highest temp recorded for Station3 was: " << Highest3 << " tenths of a degree Celsius \nor: " << TempDouble << " degrees Celsius." << endl;
}

给了我:

The highest temp recorded for Station1 was: 339 tenths of a degree Celsius
or: 33 degrees Celsius.
The highest temp recorded for Station2 was: 350 tenths of a degree Celsius
or: 35 degrees Celsius.
The highest temp recorded for Station3 was: 344 tenths of a degree Celsius
or: 34 degrees Celsius.

为什么TempDouble没有显示任何小数?任何澄清都会很棒!提前谢谢。

3 个答案:

答案 0 :(得分:5)

您的代码执行整数除法。那是因为两个操作数都是整数。

TempDouble = Highest1 / 10;

整数除法产生整数结果。是的,您确实将该整数分配给浮点值,但为时已晚。你已经失去了师的小部分。

你需要让你的操作数中至少有一个真正有价值才能获得真正的分裂。

例如:

TempDouble = Highest1 / 10.0;

答案 1 :(得分:2)

此行执行整数除法,因为/的左右操作数为int s:

TempDouble = Highest1 / 10;

要获得double,请确保其中一个操作数为double。最简单的方法是:

TempDouble = Highest1 / 10.0;

答案 2 :(得分:2)

整数运算的结果是整数。如果需要浮点结果,则需要在表达式中包含浮点数,例如:

 TempDouble = Highest1 / 10.0;