たまにド忘れするので備忘録。
方法1
小数から整数部分のみを引く。
float型をint型へキャスト変換
#include <stdio.h>
int main(void){
float num;
float a;
num = 1.5;
// int型のキャスト変換で整数化
a = num - (int)num;
printf("%f",a);
}
実行結果
0.500000
floor関数を用いる
#include <stdio.h>
int main(void){
float num;
float a;
num = 1.5;
// floor関数の性質上、負の場合は分ける
if(num >= 0){
a = num - floor(num);
} else {
a = -num - floor(-num);
}
printf("%f",a);
}
実行結果
0.500000
floor関数を用いる(fabs関数利用)
#include <stdio.h>
int main(void){
float num;
float a;
num = 1.5;
// 浮動小数点の絶対値fabs関数を利用
a = fabs(num) - floor(fabs(num));
printf("%f",a);
}
実行結果
0.500000
方法2
math.h
のmodff関数を使う。
float modff(float value, float *iptr);
modff関数は、valueを整数部と小数部に分ける。整数部及び小数部の符号は、xと同じとなる。iptrが指すオブジェクトに整数部を格納する。
#include <stdio.h>
#include <math.h>
int main(void){
float num;
float a, b;
num = 1.5;
// aにnumの小数部、bにnum整数部が代入される
a = modff(num,&b);
printf("%f %f",a,b);
}
実行結果
0.500000 1.000000
参考
https://masutaka.net/chalow/2004-12-10-1.html
http://www.c-lang.org/detail/function/modff.html