使用c ++进行转换不能按预期工作

时间:2013-03-26 06:05:22

标签: c++ casting

这个小程序用于计算2位数的第一位和第二位数。但是,当我尝试在数字99上使用它然后它打印9和8,但其他2位数字似乎工作正常。这可能是微不足道的,但我在编程方面相对较新。

#include <iostream>

using namespace std;

void test(int num) {

    float numValue = (num*1.0) / 10;
    cout << numValue << endl;
          // prints 9.9

    int firstDigit = num / 10;
    cout << firstDigit << endl;
         // prints 9

    int secondDigit = (numValue - firstDigit) * 10;
    cout << secondDigit << endl;
         // prints 8, supposed to be (9.9 - 9) * 10

}

int main()
{
    test(99);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这是因为(numValue - firstDigit)不完全是0.9,而是0.89999...,因为浮点数通常不准确。因此,当您将0.8999...乘以10时,您会得到8.999...的结果但是,您将它放入int变量中,因此它会被修剪并且恰好为8。

您确实不需要浮点运算来完成您的确切任务,但使用整数就足够了。