2

这个小程序是用来计算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;
}
4

1 回答 1

1

发生这种情况是因为(numValue - firstDigit)不完全是 0.9,而是0.89999...因为浮点数通常不准确。所以当你乘以0.8999...10 时,你得到的结果是8.999...然而,然后你把它放入一个int变量中,所以它被修剪并变成了 8。

不过,您的确切任务并不需要浮点运算,使用整数就足够了。

于 2013-03-26T06:11:14.763 回答