Получить десятичную часть из числа с плавающей точкой

Мне нужно получить десятичную часть из числа с плавающей запятой, например:

float x = 18.30;

Мне нужен способ получить ".30" в другом float.. поэтому я буду иметь float равным 18.30, а другой равен 0,30

Любые идеи?

Ответы

Ответ 1

Я не уверен, есть ли функция, выполняющая именно так, как вы хотите, но вы можете использовать это:

x - floor(x)

Ответ 2

Принятый ответ выше (x-floor (x)) работает для положительных чисел, но не подходит для отрицательных чисел. Вместо этого используйте trunc():

x - trunc(x)

Но решение fmod() будет использовать, если вы спросите меня:

fmod(x, 1)

Ответ 3

Функция modf() делает это более непосредственно, чем fmodf().

Ответ 4

Существует семейство fmod-функций, например. fmod (18.30, 1.0), fmodf (18.30, 1.0) и т.д.

#include <stdio.h>
#include <math.h>

int main (int argc, const char * argv[]) {
    // insert code here...
    printf("%f\n", fmod(18.30, 1.0));
    return 0;
}

Ответ 5

Примечание: используйте modf или fmod, как предложено в других ответах.

Но не ожидайте иметь точно такое же число, как atof ( "0.30" ), как предлагает ваш запрос равных.

Действительно, бывает, что atof ( "18.30" ) является ближайшим поплавком к atof ( "18.0" ) + atof ( "0.30" ), но эта операция не является точной, она имеет ошибку округления, как и любая сумма of atof ( "0.30" ) с целым числом > 0.

Итак, когда вы вычитаете целочисленную часть, нет никакой причины находить atof ( "0.30" ) назад, вы найдете только что-то около atof ( "0.30" ).

Выражается в Squeak/Pharo Smalltalk (используется двойная точность)

(1 to: 100) count: [:i | 0.3 + i = (3/10+i) asFloat].

дает

-> 100

Но:

(1 to: 100) count: [:i | (3/10+i) asFloat - i = 0.3].

дает

-> 0

Ответ 6

х = 3.5

у = ParseInt (3.5)

fraction_part = (x-y);

Ответ 7

Лучший способ, который я нашел с помощью типов переменных Objective-C, выглядит следующим образом:

CGFloat floatingPointNumber = 18.30;
NSInteger integerNumber = floatingPointNumber;
CGFloat floatingPointNumberWithoutTheInteger = floatingPointNumber - integerNumber;

Ниже приведены результаты при выполнении:

введите описание изображения здесь