从C中的浮点数中提取小数部分

Bin*_*inu 45 c floating-point numbers decimal

我们如何提取浮点数的小数部分并将小数部分和整数部分存储到两个单独的整数变量中?

Joh*_*itb 85

你使用的modf功能:

double integral;
double fractional = modf(some_double, &integral);
Run Code Online (Sandbox Code Playgroud)

您也可以将其强制转换为整数,但要注意您可能会溢出整数.结果是不可预测的.

  • @penu这是因为您使用%d来打印double。这是工作代码:http://codepad.org/kPGKtcZi (2认同)
  • 此代码将 123.456745693850 从 0.45674569385 截断为 0.456746 (2认同)

Chr*_*nch 44

试试这个:

int main() {
  double num = 23.345;
  int intpart = (int)num;
  double decpart = num - intpart;
  printf("Num = %f, intpart = %d, decpart = %f\n", num, intpart, decpart);
}
Run Code Online (Sandbox Code Playgroud)

对我来说,它产生:

Num = 23.345000, intpart = 23, decpart = 0.345000
Run Code Online (Sandbox Code Playgroud)

这似乎是你要求的.

  • int decpart = 100000*(num - intpart); (2认同)
  • 这种方法易受一些令人讨厌的浮点问题的影响.尝试设置`num = 1.1`作为快速示例.作为浮点数`decpart`不能代表`0.1`. (2认同)

Tre*_*ith 15

快速"坚果壳"最明显的答案似乎是:

#define N_DECIMAL_POINTS_PRECISION (1000) // n = 3. Three decimal points.

float f = 123.456;
int integerPart = (int)f;
int decimalPart = ((int)(f*N_DECIMAL_POINTS_PRECISION)%N_DECIMAL_POINTS_PRECISION);
Run Code Online (Sandbox Code Playgroud)

您可以通过更改N_DECIMAL_POINTS_PRECISION以满足您的需要来更改所需的小数点数.