2016-11-21 11 views
0

Я пытаюсь получить первые две цифры после десятичной точки числа и проверить на увидеть, если они равны друг другу, и в то же время, не равно 0.C++ - Я хочу выбрать первые две цифры после десятичной точки и проверить, являются ли они одинаковыми, а не 0

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

Использование setprecision даст мне номер целиком, а не только две цифры после десятичной точки.

Например:

i = 3.141592 
cout << setprecision(3) << i 

будет выводить 3,14, но я хочу только 14.

+4

Как насчет умножения на 100, чтобы получить 314.1592, а затем наложить на int, что даст 314 и, наконец, по модулю 100, что приведет к 14? –

+0

Я как раз собирался это написать. lol – Sedrick

+0

'setprecision' просто изменяет количество отображаемых чисел. Если вам нужны две цифры, вам нужно что-то другое, кроме выходного манипулятора. – user463035818

ответ

0

Вы можете использовать функцию пола из станда библиотеки

int(i*100 - (floor(i))*100) 

Вот хороший пример веб-страница: http://en.cppreference.com/w/cpp/numeric/math/floor

+0

Если он после первых двух _digits_, результат должен быть отправлен в int в любом случае, иначе вы получите значение с плавающей запятой. Редактировать: хотя для уточнения я не сделал ни одного ответа на ваш ответ. –

+0

Да, вы правы. Извините, он также должен быть добавлен в int. Я обновил ответ – noobuntu

+0

@noobuntu Можете ли вы гарантировать, что результат будет правильным, независимо от того, что такое 'i'? Потому что, вы знаете, арифметика с плавающей запятой. Это совершенно не очевидно для меня. Это зависит от базовой архитектуры? – freakish

0

Вы могли бы реализовать функцию, которая возвращает цифры как целое.

#include <math.h> 

int digits_after_decimal_point(double number, unsigned int precision){ 
    double trunc = number - static_cast<int>(number); //3,141 > 0,141 
    return static_cast<int>(trunc * pow(10,precision)); 
} 

Пример вызов:

std::cout << digits_after_decimal_point(3.14159, 3) << std::endl; 

Выход:

141 

Но проблема в том, проверочных цифрах целых чисел (без использования кучи % операций) довольно невыполнимые. Поэтому для проверки вы можете преобразовать результат в std::string (используя std::ostringstream), и вы можете сравнить конкретные индексы.

 Смежные вопросы

  • Нет связанных вопросов^_^