获取数字在c中的小数位数?

布雷姆

我试图获取一个数字在c中的小数位数:0.0001-> 4个小数,3,54235-> 5个小数,依此类推(如果不知道,则是逗号后面的数字数。)我们的老师说这可以通过两种方式完成:使用字符串和不使用字符串。我认为我不会使用字符串,因为我对字符串没有经验。

这就是我想出的

int funzione1(float decimals){
  int x=1,c=0,y=1;
  while (x!=0){
      if((decimals - y) > 0){
          y = y / 10;
          c++;
      }else{
          decimals = decimals - y;
      }
      if(decimals == 0)
          x=0;
  }
  return c-1;
}

调用该函数时,它应该返回我计算出的小数位数,但实际上并不会陷入无限循环。

该代码背后的想法是将数字“字符串”中的每个数字都设为0,然后检查总数是否为0

3.456 c = 0

0.456 c = 1

0.056 c = 2

0.006分= 3

0.000返回c

但这给我留下了两个问题:1如何在逗号前确定数字的位数,例如5564.34234,此代码将不起作用,因为在整数为实数0之前它将计数为8。因此无法返回正确的小数位数.2。我设计的代码无法正常工作。只是陷入无限循环。我不知道在哪里创建循环的无限性。

我如何使此代码起作用?

PS。我在Java中找到有关此问题的文章:如何找出一个数字有多少个小数?但它使用的是字符串,我不喜欢这样做,因为我不知道如何使用字符串。

编辑:这是我尝试的另一段代码,当您输入大于1的数字时输给50的输出失败,如果输入的数字小于0则失败(我不明白,一点点)无论如何,这里是代码:

int funzione1(float decimals){
    int i=0;
    while(decimals!=((int)decimals)){
        i++;
        decimals=decimals*10;
    }
    return i;
}
詹姆斯·斯努克

如果您不关心舍入,则无需计算小数位数,您只需计算二进制位数。这是因为10一次恰好包含2作为因数,因此10 ^ n和2 ^ n具有与因数相同的2s。计算二进制位数的最快方法是获取浮点数的指数。

例如,二进制0.001占据3个小数位代表0.125,0.0001占据4个0.0625。

您可以获取值的小数部分,然后乘以2并按照人们建议的10除去整数(它将得到相同的答案)。

或者,您可以通过优化解决方案获得更多乐趣(places函数完成大部分工作):

#include <math.h>

int saturateLeft (unsigned int n) {
  n |= (n <<  1);
  n |= (n <<  2);
  n |= (n <<  4);
  n |= (n <<  8);
  n |= (n << 16);
  return n;
}

int NumberOfSetBits(int i)
{
  i = i - ((i >> 1) & 0x55555555);
  i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
  return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

int places (double num) {
  int exponent;
  float mantissa = frexp (num, &exponent);

  /* The answer we are looking for is given by the 
     (number of bits used by mantissa) - the exponent.
  */

  unsigned intMantissa = scalbnf (mantissa, 32);
  /* Could also be got by doing:
     intMantissa = *(unsigned *)&mantissa << 9;
  */

  /* To work out how many bits the mantissa covered we 
     need no gaps in the mantissa, this removes any gaps.
  */

  intMantissa = saturateLeft (intMantissa);
  int bitCount = NumberOfSetBits (intMantissa);

  /* bitCount could also be found like this:
     intMantissa = ~intMantissa;
     int bitCount = 32 - ilogb (intMantissa) - 1;
  */

  int result = bitCount - exponent;
  if (result < 0)
    return 0;

  return result;
}

这里找到bitCounting算法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用DecimalFormat获取变化量的小数位数

来自分类Dev

检查数字的小数位数是否高于JavaScript中的.5?

来自分类Dev

Sailsjs / waterline指定模型中的小数位数

来自分类Dev

将数字打印到可变的小数位数

来自分类Dev

使用Javascript获取小数位数

来自分类Dev

XQuery中的XPath:小数位数

来自分类Dev

确定浮点数中的小数位数

来自分类Dev

HSQLDB中的Oracle NUMBER(精度,小数位数)

来自分类Dev

如何使用AppleScript在“数字”单元格中设置小数位数?

来自分类Dev

在Unity3D中,从数字中除去除设置的小数位数外的所有小数

来自分类Dev

R中删除的小数位数

来自分类Dev

Postgres中数字数据类型的精度和小数位数是多少?

来自分类Dev

小数位数具体取决于数字的大小

来自分类Dev

获取Pinescript中的小数位

来自分类Dev

在熊猫中处理小数位数

来自分类Dev

检查数字字符串中的小数位数

来自分类Dev

使用DecimalFormat获取变化量的小数位数

来自分类Dev

在C ++中将带小数位数的数字从char转换为int

来自分类Dev

仅匹配小数位数为n的数字

来自分类Dev

如何显示给定小数位数的数字

来自分类Dev

小数位数-jQuery

来自分类Dev

将小数位数切成数字

来自分类Dev

在保持类“数字”不变的情况下,控制write.table中的小数位数

来自分类Dev

通过将小数位数作为参数在 Scala 中传递来格式化数字

来自分类Dev

C# - 如何显示 3 个小数位数的每个组合(小数点外的 4 个数字)

来自分类Dev

有没有办法限制 Handlebars 输出中数字显示的小数位数?

来自分类Dev

如何使用 Google 表格中的 IFS 和 AND 函数根据数字的小数位数创建条件?

来自分类Dev

Geotools 小数位数

来自分类Dev

如何限制多个数字输出中的小数位数?

Related 相关文章

  1. 1

    使用DecimalFormat获取变化量的小数位数

  2. 2

    检查数字的小数位数是否高于JavaScript中的.5?

  3. 3

    Sailsjs / waterline指定模型中的小数位数

  4. 4

    将数字打印到可变的小数位数

  5. 5

    使用Javascript获取小数位数

  6. 6

    XQuery中的XPath:小数位数

  7. 7

    确定浮点数中的小数位数

  8. 8

    HSQLDB中的Oracle NUMBER(精度,小数位数)

  9. 9

    如何使用AppleScript在“数字”单元格中设置小数位数?

  10. 10

    在Unity3D中,从数字中除去除设置的小数位数外的所有小数

  11. 11

    R中删除的小数位数

  12. 12

    Postgres中数字数据类型的精度和小数位数是多少?

  13. 13

    小数位数具体取决于数字的大小

  14. 14

    获取Pinescript中的小数位

  15. 15

    在熊猫中处理小数位数

  16. 16

    检查数字字符串中的小数位数

  17. 17

    使用DecimalFormat获取变化量的小数位数

  18. 18

    在C ++中将带小数位数的数字从char转换为int

  19. 19

    仅匹配小数位数为n的数字

  20. 20

    如何显示给定小数位数的数字

  21. 21

    小数位数-jQuery

  22. 22

    将小数位数切成数字

  23. 23

    在保持类“数字”不变的情况下,控制write.table中的小数位数

  24. 24

    通过将小数位数作为参数在 Scala 中传递来格式化数字

  25. 25

    C# - 如何显示 3 个小数位数的每个组合(小数点外的 4 个数字)

  26. 26

    有没有办法限制 Handlebars 输出中数字显示的小数位数?

  27. 27

    如何使用 Google 表格中的 IFS 和 AND 函数根据数字的小数位数创建条件?

  28. 28

    Geotools 小数位数

  29. 29

    如何限制多个数字输出中的小数位数?

热门标签

归档