Я пытаюсь получить первые две цифры после десятичной точки числа и проверки, чтобы увидеть, равны ли они друг другу и, в то же время, не равны 0.
Я знаю, как сделать проверку вещи но Я понятия не имею, как выбрать первые две цифры после десятичной точки.
Использование setprecision даст мне номер полностью, а не только две цифры после десятичной точки.
Например:
i = 3.141592
cout << setprecision(3) << i
выведет 3,14, но я хочу только 14.
Вы можете использовать функцию пола из станд библиотека
int(i*100 - (floor(i))*100)
Вот хороший пример веб-страницы: http://en.cppreference.com/w/cpp/numeric/math/floor
Вы можете реализовать функцию, которая возвращает цифры в виде целого числа.
#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
), а затем вы можете сравнить конкретные показатели.