Почему double вместо float? Вывести дробную часть числа
Привет) Нужно вывести дробную часть числа. Например, при вводе 643.12 программа должна выдать результат 0.12 . Почему в примере ниже не хватает точности float для этой операции? Откуда там появляются знаки? Я слышал, что в компьютере числа хранятся не точно, это связано с этим?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float n;
cin >> n;
cout << n - trunc(n) << endl;
return 0;
}
Ответы (1 шт):
Я бы делал примерно так:
float n;
cin >> n;
cout << fixed << setprecision(2) << n - trunc(n) << endl;
Это - если 1. задано именно число с плавающей точкой и 2. вы знаете, сколько именно знаков после запятой вы хотите вывести.
Если не знаете число знаков - то задание бессмысленное: вы не знаете, что именно было введено/вычислено - 0.12 или 0.1199995...
Но если вам надо именно дробную часть введенного числа - обрабатывайте ее как строку, а не как число. Типа,
string n;
cin >> n;
cout << "0";
if (size_t p = n.find("."); p != n.npos)
cout << n.substr(p);
cout << endl;
Правда, тут могут быть варианты с разными форматами ввода типа научного или со знаком...
