Почему 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 шт):

Автор решения: Harry

Я бы делал примерно так:

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;

Правда, тут могут быть варианты с разными форматами ввода типа научного или со знаком...

→ Ссылка