Я ищу функцию, которая возвращает DECIMALS часть числа (но не нравится 0.numbers), например:Десятичная часть в C++;
float x=12.3456;
Я хочу его вернуть:
int i=3456;
I исп.
x=x-(int)x;
i=x;
Но он возвращает 0.;
Я ищу функцию, которая возвращает DECIMALS часть числа (но не нравится 0.numbers), например:Десятичная часть в C++;
float x=12.3456;
Я хочу его вернуть:
int i=3456;
I исп.
x=x-(int)x;
i=x;
Но он возвращает 0.;
Давайте эти два присваивания один за другим
x=x-(int)x;
i=x;
Сначала вы делаете x=x-(int)x
что приведет к x
равна 0.346
. Затем вы делаете i=x
, который усекает (т. Е. Удаляет десятичные знаки) значения x
, приводя к i
, становящемуся нулевым.
Вам нужно умножить x
на 1000
до назначения на i
:
i = 1000 * x;
Число 1000
зависит от количества цифр после десятичной точки, которые вы хотите. Больше нулей означает больше цифр.
Итак, я должен создать функцию, которая возвращает (например, int e) размер X, , а затем умножить x на 10^e; – Gabriel
Чтобы добавить Joachim Pileborg's answer: если вы действительно хотите иметь все дробные числа в вашем целое число, вы могли бы сделать что-то вроде этого:
#include <iostream>
#include <iomanip>
#include <limits>
#include <cmath>
template <typename T>
long long fractional(T val)
{
T frac = val - std::floor(val);
long long alldigits(std::pow(10, std::numeric_limits<T>::digits10)*frac);
while (alldigits%10 == 0)
{
alldigits /= 10;
}
return alldigits;
}
int main()
{
std::cout << fractional<float>(1.0/8.0) << std::endl; // 125
std::cout << fractional<float>(1.0/3.0) << std::endl; // 333333
std::cout << fractional<double>(1.0/3.0) << std::endl; // 333333333333333
return 0;
}
Live example here. Но пример показывает также проблемы, которые вы хотите запустить в: в зависимости от количества и точности базового типа данных вы получите разные количества цифр, которые в конечном итоге трудно интерпретировать. Скорее всего, получение фиксированного количества цифр будет лучшим решением.
вы могли бы попробовать это:
#include <iostream>
int intpart(float x) {
float b = 0;
x -= (int)x;
while (x - (int)x != 0)
x *= 10;
return (int)x;
}
int main(int argc, char const *argv[])
{
std::cout << intpart(17.5) << std::endl;
return 0;
}
Существует не всегда четкое количество десятичных цифр, так как число с плавающей точкой, как правило, представляется в виде (эквивалент) доли целых чисел а/Ь, где Ъ сила 2. Но вы можете сделать это, указав * количество цифр, которое вы хотите. Например, для 5 цифр умножьте десятичную часть на 10 000 и преобразуйте в целое число. –