Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
alexplashinskiy
0 / 0 / 0
Регистрация: 08.01.2018
Сообщений: 20
1

Cin>>float вводит не совсем точные данные

12.01.2018, 01:35. Просмотров 921. Ответов 3
Метки нет (Все метки)

cin>>float ввожу допустим 3339.08, а присваивается значение 3339.08008. Из-за чего происходит это? Можно ли как-то сделать так, чтоб присваивалось "точнее"?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2018, 01:35
Ответы с готовыми решениями:

Как ведет себя cin, если пользователь вводит некорректные данные?
Читаю C++ Primer Plus by Stephen Prata. В седьмой главе у него есть следующий пример. //...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная "защита от дурака" на ввод....

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не...

Cin не дает ввести символ и неправильно вводит вещественное число (C++ Builder 6)
#include<iostream.h> #include<conio.h> #pragma hdrstop #pragma argsused int main(int...

3
Hitoku
1722 / 1318 / 1404
Регистрация: 28.10.2016
Сообщений: 4,265
Завершенные тесты: 4
12.01.2018, 01:51 2
Вы точно всё правильно делаете?
C++
1
2
3
    float f;
    cin >> f;
    cout << f << endl;
Результат:
3339.08
3339.08
Для продолжения нажмите любую клавишу . . .
0
alexplashinskiy
0 / 0 / 0
Регистрация: 08.01.2018
Сообщений: 20
12.01.2018, 01:56  [ТС] 3
По крайне мере я не вижу, из-за чего это может произойти...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <process.h>
 
 
using namespace std;
int main()
{
    setlocale(LC_CTYPE, "rus");
     float nv, iv, p;
    int t;
    cout << "Введите начальный вклад:";
    cin >> nv;
    cout << "Введите итоговый вклад:";
    cin >> iv;
    cout << "Введите процентную ставку:";
    cin >> p;
    if (iv < 1 || p < 0.0001 || nv < 0.00001)
    {
        cout<<"Одно или несколько значений введены не корректно\n";
        system("pause");
        exit(0);
    }
    t = 1;
    for(; nv < iv;t++)
    { 
        nv=nv + (nv*p / 100);
    }
    if (t == 1)
        cout << "Вам понадобится " << t << " год.";
    if (t >= 2 && t <= 5)
        cout << "Вам понадобится " << t << " года.";
    if(t>=5)
    cout << "Вам понадобится " << t << " лет.";
    system("pause");
    return 0;
}
Я заметил, что иногда присваивает лишний год, решил через отладчик глянуть, и он пишет, что присваивается значение другое... Это мелочь, но из-за этого прогоняется ещё раз цикл, и присваивается переменной t лишняя единица
0
Миниатюры
Cin>>float вводит не совсем точные данные  
nonedark2008
1299 / 961 / 296
Регистрация: 28.07.2012
Сообщений: 2,657
12.01.2018, 02:06 4
Лучший ответ Сообщение было отмечено alexplashinskiy как решение

Решение

Цитата Сообщение от alexplashinskiy Посмотреть сообщение
ввожу допустим 3339.08, а присваивается значение 3339.08008
Ошибки округления. Почитай про представление чисел с плавающей точкой в памяти. Вводимое число округляется до ближайшего, которое представимо данным типом.
Цитата Сообщение от alexplashinskiy Посмотреть сообщение
Можно ли как-то сделать так, чтоб присваивалось "точнее"?
Взять тип поточнее, double например. Однако округление там тоже будет присутствовать, хоть и в меньшей степени.

Добавлено через 6 минут
Цитата Сообщение от alexplashinskiy Посмотреть сообщение
Введите начальный вклад
И вообще, значение валют стоит хранить либо в целых числах, либо с помощью арифметики с фиксированной точностью.
1
12.01.2018, 02:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2018, 02:06

Есть ли способ получить точные данные о размере и расположении разделов на hdd при использовании gpt
здравствуйте. подскажите пожалуйста, есть ли способ получить точные данные о размере и...

опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; float f1(float x)/*vira*enie 1*/ ...

Не понимает Dictionary<string, (float[][] train, float[][] valid, float[][] test)> DataSet;
Доброго времени суток. Пытаюсь запустить пример по работе с библиотекой. Не понимает конструкцию ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.