Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mymedia
191 / 191 / 48
Регистрация: 27.05.2011
Сообщений: 544
#1

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

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

Всем привет!
Пытаюсь решить такую задачу, но для дробных чисел ничего не получается С целыми числами всё норм.
Нужно посчитать к-во цифр в данном числе (тип 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 минут
Помогите, пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2014, 20:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество цифр в вещественном (!) числе (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vandris
63 / 63 / 13
Регистрация: 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 цифр не окажутся до запятой, потом взять целую часть, убрать лишние нули в конце, и уже тогда считать цифры.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2014, 22:56
Привет! Вот еще темы с ответами:

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

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

Количество цифр в числе - C++
Число указует пользователь и нужно через for цыкл

Подсчитать количество цифр 5 в числе - C++
определить количество цифр 5 в записи всех натуральных чисел от 1 до N (N&lt;10^18) включительно.


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

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

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