如何获取浮点数的小数位数?

时间:2019-12-23 18:55:19

标签: c floating-point decimal

我想表达根据科学计数法四舍五入的最终产品。 因此,如果80.55和879.5689给出70849.281250,则最终打印功能将输出70849.28。

是否可以获取两个输入的浮点数的小数位数? (我从技术上说,他们没有小数位,但是有可能吗?)如果我有两个整数声明为每个小数位数,则可以比较使用if / else并获得至少一个声明为另一个整数,但我又一次不知道如何使用int代替5:%.5f

1 个答案:

答案 0 :(得分:0)

  

如何获取浮点值的小数位数?
  有没有办法获取两个输入的浮点数的小数位数?

  1. 将用户输入的读取到 string 。强烈推荐fgets()

  2. 使用strchr()或辅助代码搜索小数点,并使用"%n"搜索数字的末尾。

也许:

static int find_prec(const char *s, int length) {
  for (int i=0; i < length; i++) {
    if (s[i] == '.') {
      i++;
      int p = 0;
      while (isdigit((unsigned char) s[i+p])) {
        p++;
      }
      return p;
    }
  }  
  return 0;
}

...
if (fgets(buffer, sizeof buffer, stdin)) {
  double x[2];
  int n[2];
  if (sscanf(buffer, "%f%n %f%n", &x[0], &n[0], &x[1], &n[1]) == 2) {
    int num_dp[2];
    num_dp[0] = find_prec(buffer, n[0]);
    num_dp[1] = find_prec(buffer + n[0], n[1] - n[0]);