我想将浮点数分成两个独立的部分作为真实和非真实部分。
例如:如果x = 45.678
,则我的函数必须提供real= 45
和non_real=678
。我尝试了以下逻辑。
split ( float x, unsigned int *real, unsigned int *non_real)
{
*real = x;
*non_real = ((int)(x*N_DECIMAL_POINTS_PRECISION)%N_DECIMAL_POINTS_PRECISION);
printf ("Real = %d , Non_Real = %d\n", *real, *non_real);
}
其中N_DECIMAL_POINTS_PRECISION = 10000
。它会给小数部分直到4位数,而不是之后。
它仅适用于特定的小数点精度集。代码不是通用的,它必须适用于所有浮动数字,例如9.565784
和45.6875322
等等。所以,如果有人能帮助我,这将是非常有帮助的。
提前致谢。
答案 0 :(得分:0)
使用floor()
查找整数部分,然后从原始值中减去整数部分以找到小数部分。
注意:您最有可能遇到的问题是某些数字太大而整数部分无法适应int
的范围。
- 增加 -
当且仅当您能够假设unsigned int
大于浮点表示的有效位数(例如32位unsigned int
和IEEE标准单精度浮点数时只有23个小数位,其中&#34; 32 <23&#34;为真);那么unsigned int
太大的数字就不能有任何小数位。这导致了一个类似的解决方案:
if(x > UINT_MAX) {
integer_part = x;
fractional_part = 0;
} else {
integer_part = (int)x;
fractional_part = x - integer_part;
}