Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
1

Количество цифр в вещественном (!) числе

16.05.2014, 20:51. Показов 7844. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
Пытаюсь решить такую задачу, но для дробных чисел ничего не получается С целыми числами всё норм.
Нужно посчитать к-во цифр в данном числе (тип double). Если число дробное, десятичную зяпятую не считать. Если число неотрицательное, знак не считать.
Вариант 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<class T>
int getLendth(T num)
{
    using namespace std;
    T full; // целая часть
    T fract = modf(num, &full); // дробная часть
 
    const int full_count = floor(log10(full))+1;    // к-во цифр в целой части
 
// ***
    int exp;
    T mant2 = frexp(fract, &exp);   // ДВОИЧНАЯ МАНТИССА
    const int fract_count = mant2/fract * pow(2,exp);   // к-во цифр в дробной части
// ***
 
    const int sign_count = num >= 0 ? 0 : 1;    // есть ли знак
    return full_count+fract_count+sign_count;
}

Вариант 2
C++
1
2
3
4
5
6
7
8
9
10
template<class T>
int getLendth(T num)
{
    using namespace std;
    stringstream s_stream;
    string s_string;
    s_stream << num;
    s_stream >> s_string;
    return s_string.size() - ( ceil(num)-floor(num) ? 1 : 0 );  
}

В принципе, меня вполне устраивает второй вариант, но если в числе более шести цифр, то число записывается в экпоненциальном ввиде, а как это отключить, я не знаю. Есть манипулятор scientific, который принудительно включает экспоненциальный формат вывода, но почему-то нет обратного
P.S.: в обоих случаях шаблоны инстанцируются с T = double

Добавлено через 5 минут
Помогите, пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2014, 20:51
Ответы с готовыми решениями:

Подсчитать количество цифр после запятой в вещественном числе
Доброго времени суток. Подскажите, пожалуйста, как посчитать кол-во цифр после запятой? Например в...

Определить количество значимых цифр в вещественном числе со знаком
Дано вещественное число, определить количество значимых цифр в вещесвенном числе со знаком.

Подсчет количества цифр в вещественном числе
Насколько я понял, сделать это можно лишь с переводом в строковый тип, а вот сделать никак не могу....

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

1
66 / 65 / 29
Регистрация: 19.01.2011
Сообщений: 94
16.05.2014, 22:56 2
Цитата Сообщение от mymedia Посмотреть сообщение
но почему-то нет обратного
Ну как же нет, если есть?) Только забегая вперед, скажу что он Вам не всегда поможет
C++
1
2
3
4
5
6
7
double test = 1.0 / 1000000000.0;
 
std::cout << test << "\n";                    // 1e-009
std::cout.setf(std::ios::fixed);              
std::cout << test << "\n";                    // 0.000000
std::cout.unsetf(std::ios::fixed);
std::cout << test << "\n";                    // 1e-009
Выводимое количество знаков после запятой регулируется так:
C++
1
2
std::cout.setf(std::ios::fixed);
std::cout << std::setprecision(9) << test << "\n";           //0.000000001
Но такой трюк сработает не со всеми числами. Дело в том, что тип double хранит 15-17 значащих цифр (видимо дело в двоичном представлении числа и его округлении). Причем не важно, до запятой или после.

C++
1
2
3
4
double test = 10000000000.111111;
 
std::cout.setf(std::ios::fixed);
std::cout << std::setprecision(9) << test << "\n";      // 10000000000.1111110687
Так что, я бы на Вашем месте наверно умножал на 10 до тех пор, пока 15 цифр не окажутся до запятой, потом взять целую часть, убрать лишние нули в конце, и уже тогда считать цифры.
0
16.05.2014, 22:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2014, 22:56
Помогаю со студенческими работами здесь

Вывести на экран количество цифр в заданном числе и сумму этих цифр
я начинающий! помогите! мне на екзам! Дано натуральное число а (a&lt;100). Напишите программу,...

Определить количество цифр в числе n и сумму всех его цифр
Дано натуральное n , определить количество цифр в числе n и сумму всех его цифр. Значение n ...

Рекурсия: количество цифр в числе, сумма цифр и реверс числа
Вот задание: Написать программу, которая запрашивает у пользователя целое число, на экран выводит...

С клавиатуры вводится положительное натуральное число. Определить количество цифр в числе (сумму цифр)
С клавиатуры вводится положительное натуральное число. Определить количество цифр в числе (сумму...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru