这个问题已经在这里有了答案:




已关闭8年。






在C++中将double转换为int损失1

#include <iostream>
#include <cmath>
using namespace std;

void main() {

    double num = 1234.34;
    int numInt = num;
    double numAfterPoint = num - numInt; // 0.34

    int counter = 1;
    double numFloatPower = numAfterPoint;

    while (true) {
        numFloatPower = numAfterPoint * pow(10.0, counter);
        cout << numFloatPower << " > " << (int)numFloatPower << " ";
        system("pause");
        counter++;
    }

}

当前结果:
3.4 > 3 Press any key to continue . . .
34 > 33 Press any key to continue . . .
340 > 339 Press any key to continue . . .
3400 > 3399 Press any key to continue . . .

结果应为:
3.4 > 3 Press any key to continue . . .
34 > 34 Press any key to continue . . .
340 > 340 Press any key to continue . . .
3400 > 3400 Press any key to continue . . .

等...

最佳答案

强制转换为intt的操作(int)doubleValue执行截断,这意味着如果该数字在内部表示为33.999999999 ...,它将被截断为33。

如果需要进行舍入(3.9→4、3.4→3),请使用round()

注意:

  • 1234.34实际上是1234.33999999999991814547684044...,因为它不能使用有限数量的二进制数字精确表示,因此在第53位将四舍五入到
  • 因此您的0.34实际上是0.339999999999918145145840840 ...,
  • 您的3.4实际上是3.3999999999991814547684044 ...,
  • 您的34实际上是33.999999999991814547684044 ...,
  • 您的340实际上是339.99999999991814547684044 ...,
  • 09-25 17:49