Ответ 1
Я не уверен, есть ли функция, выполняющая именно так, как вы хотите, но вы можете использовать это:
x - floor(x)
Мне нужно получить десятичную часть из числа с плавающей запятой, например:
float x = 18.30;
Мне нужен способ получить ".30" в другом float.. поэтому я буду иметь float равным 18.30, а другой равен 0,30
Любые идеи?
Я не уверен, есть ли функция, выполняющая именно так, как вы хотите, но вы можете использовать это:
x - floor(x)
Принятый ответ выше (x-floor (x)) работает для положительных чисел, но не подходит для отрицательных чисел. Вместо этого используйте trunc():
x - trunc(x)
Но решение fmod() будет использовать, если вы спросите меня:
fmod(x, 1)
Функция modf()
делает это более непосредственно, чем fmodf()
.
Существует семейство 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;
}
Примечание: используйте 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
х = 3.5
у = ParseInt (3.5)
fraction_part = (x-y);
Лучший способ, который я нашел с помощью типов переменных Objective-C, выглядит следующим образом:
CGFloat floatingPointNumber = 18.30;
NSInteger integerNumber = floatingPointNumber;
CGFloat floatingPointNumberWithoutTheInteger = floatingPointNumber - integerNumber;
Ниже приведены результаты при выполнении: