исправление точности static_cast <int>() в c ++ - PullRequest
1 голос
/ 12 октября 2011
# include <iostream>
using namespace std;

int main()
{
    double a;
    cin >> a;
    int b = (int) a*100;
    cout << b << endl;
}

Если вы введете 2,53, это даст b = 252

Я знаю, что это точная вещь, но как исправить это, не используя сравнение?

Ответы [ 2 ]

5 голосов
/ 12 октября 2011

Если a гарантированно будет положительным, используйте:

int b = (int) (a*100+0.5);

Если не использовать:

int b = (int) floor(a*100+0.5);

Плавающие в int усечения (округляет до нуля).1008 * Если вы хотите продолжать усечение, но хотите избежать проблем с точностью, используйте маленький эпсилон (1e-4) вместо 0,5 в приведенном выше коде.

2 голосов
/ 12 октября 2011

Вы хотите округлить вместо усечения. Для этого удобна функция пола:

int b = (int)floor(a*100+0.5);
...