Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/88: Рейтинг темы: голосов - 88, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 14.10.2018
Сообщений: 23

Точное количество значащих цифр после запятой с++

16.10.2020, 23:10. Показов 18323. Ответов 23

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как получить точное количество значащих цифр после запятой?
Изначальное число неизвестно, пользователь вводит любое число.
К примеру, при вводе 1.12345 выводится 5, при 345.543 выводится 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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
    double number, fractpart, intpart;
    int count = 0;
    cout << " Введите дробное число: ";
    cin >> number;
    fractpart = number - (int)number;       
    intpart = (int)number;
 
    while (fractpart - (int)fractpart != 0.0) 
    {
        fractpart *= 10;
        count++;
    }
/*т.е. если fractpart=0.34, то fractpart - (int)fractpart = 0.34 что >0,  
а когда fractpart=34.0, то fractpart - (int)fractpart = 0.0, 
что = 0.0 и цикл заканчивается, но что-то идёт не так...*/
    cout << count;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2020, 23:10
Ответы с готовыми решениями:

Какой идентификатор использовать, чтобы получить точное количество цифр после запятой
Доброго времени суток всем! Возник такой вопрос. Задана формула, которая ситает с определённой точностью . Но при компиляции это программы...

Как перевести число с плавающей запятой в последовательность значащих цифр?
Есть число с плавающей запятой, допустим double, в котором есть знак (S), мантисса (M), и экспонента (E): SEEEEEEE EEEEMMMM MMMMMMMM...

Количество цифр после запятой
число &quot;а - расчитано по формуле&quot; сравнивается с числом &quot;z - взято из edit&quot;. число &quot;а&quot; может содержать большое количество знаков...

23
21 / 17 / 5
Регистрация: 05.09.2020
Сообщений: 167
17.10.2020, 01:32
Студворк — интернет-сервис помощи студентам
Krya_Krya, Вроде всё (о результатах сообщи) :
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    unsigned int i, count = 0;
    bool start = false, isadd = true;
    unsigned int insign = 0;
    cout << "Введите дробное число: ";
    while (i = getch())
    {
        if (i != 127)
        {
            cout << (char)i;
            if (i == 10)
                break;
            if (i == 48 && start)
            {
                if (i > 47 && i < 58)
                {
                    isadd = false;
                    insign++;
                }
            }
            else if (i != 48 && start)
            {
                if (i > 47 && i < 58)
                {
                    count += insign;
                    insign = 0;
                    isadd = true;
                }
            }
            if (start && isadd)
                if (i > 47 && i < 58)
                    count++;
            if (i == 46)
                start = true;
        }
        else if (i == 127) {
            cout << '\b';
            cout << ' ';
            cout << '\b';
            count--;
        }
        if (!(i > 47 && i < 58) && (i != 127) && (i != 46))
        {
            cout << endl << "Ошибка: Вы ввели неверные данные!" << endl;
            i = 0;
            count = 0;
            insign = 0;
            start = false;
            isadd = true;
            cout << "Введите дробное число: ";
        }
    }
    cout << "Количество значимых знаков после запятой: " << count;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
17.10.2020, 02:25
Цитата Сообщение от macced Посмотреть сообщение
if (i != 127)
        {
            cout << (char)i;
            if (i == 10)
                break;
            if (i == 48 && start)
            {
                if (i > 47 && i < 58)
127, 10, 48, 47, 58, 46 - это те самые "преподы" научили вас забивать код вот такими вот волшебными константами?
0
21 / 17 / 5
Регистрация: 05.09.2020
Сообщений: 167
17.10.2020, 02:35
А что, что-то не так? Специально свёл все к числам...
Их там и есть то: '0', '9', backspace, enter, точка...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
17.10.2020, 14:35
Цитата Сообщение от macced Посмотреть сообщение
Krya_Krya, Вроде всё (о результатах сообщи)
macced, почитайте и подумайте
https://en.cppreference.com/w/... x_digits10
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2020, 14:35

Количество цифр после запятой
Доброго дня. Как после запятой запятой округлить значение до 5 знаков, если там содержится больше, а если меньше то чтобы не заполнялось...

Количество цифр после запятой
Подскажите пожалуйста, как можно прописать в DBGrid или DBEdit количество цифр после запятой, а то я пишу 2,5 а в базу записывается...

Количество цифр после запятой
Здравствуйте, помогите пожалуйста с кодом sum:=(c/a)*b; SG.Cells:=floattostr(sum)+ '%'; результат нужен с максимум одной цифрой...

Ввод в поле TextBox :цифр,одной запятой и трех цифр после запятой
Добрый день. На форме размещен TextBox в который разрешен ввод :цифр ,запятая. У меня вопрос как запретить :ввод второй запятой и разрешить...

Определить количество цифр после запятой(точки)
Здравствуйте Уважаемые Форумчане. Возник вопрос: Как мне сделать так, чтобы после запятой у меня выдавалось нужное кол-во цифр? В паскале...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru