如何提取浮点数中小数点后的数字并存储在char Array中

wztqucjr  于 2023-06-28  发布在  其他
关注(0)|答案(4)|浏览(112)

我提到了下面的问题,但我需要提取小数点后的数字并存储在char *array

  1. How to store float in array of float[]
  2. Extract digits in float in python

例如:

float = 1.24456

char *array的长度是2

预期输出:

array[0] = 2;
array[1] = 4;
array[2] = 4;

我需要在C中动态地实现它。

vkc1a9a2

vkc1a9a21#

您可以通过在<math.h>中使用函数modff来隔离float的小数部分,该函数将小数部分作为函数的返回值返回,并通过引用将整数部分作为参数返回:

float f = 3.141592f;
float numpart, fracpart;
fracpart = modff(f, &numpart);

一旦你完成了这一步,你就可以用一个传统的字符串构建函数来创建一个字符串:

char buf[100];
snprintf(buf, 100, "%f", fracpart);

另一种选择是将整个float转换为字符串,然后使用strchr(float_str, '.')隔离小数部分:

char floatbuf[100], decibuf[100], *p;
float f = 3.141592f;

snprintf(floatbuf, 100, "%f", f);
if ((p = strchr(floatbuf, '.')) != NULL)
{
    strcpy(decibuf, p + 1);
    puts(decibuf);
}
5kgi1eie

5kgi1eie2#

稍微更数学的方法,但可以说不太灵活的是:

#include <stdio.h>
#include <math.h>

int main()
{
    float num = 1.24456;
    int num_noDecimals = (int)num; //truncate decimals in original number
    float num_onlyDecimals = num - (float)num_noDecimals; //obtain only the number after decimal
    int x = 4; //number of digits past decimal to extract
    num_onlyDecimals = num_onlyDecimals*pow(10,x); //move extracting digits left of decimal
    int digits_forArray = (int)num_onlyDecimals; //truncate remaining digits right of decimal
    char arr[x];
    for(int i=x-1; i > -1; i--) { arr[i] = (char)(digits_forArray%10); digits_forArray = digits_forArray/10; }
    for(int i=0;i<x;i++) { printf("arr[%d] = %d\n",i,arr[i]); }
}

希望它的评论足够好,以理解这里所采取的步骤。

fdx2calv

fdx2calv3#

在我的代码中,我删除了整数部分,然后我将浮点部分反转为整数部分,将浮点部分的每个数字乘以数字10,然后我对数组中的每个数字进行分类
我的代码:

int main()
{
    float n = 1.2445601;
    int m=(int)n;
    float p=n-m;
    int x=7,i=0,tab[x];
    while(i<x)
    {
        p=p*10;
        i++;
    }
    i=6;
    while((int)p!=0)
    {
        tab[i--]=(int)p%10;
        p=p/10;
    }

    for(int k=0;k<x;k++)
    {
         printf("\narray[%d] = %d ;",k,tab[k]);
    }
    printf("\n");
    return 0;
}
mfuanj7w

mfuanj7w4#

如果你只需要变量中小数点后的数字,你可以使用number - floor(number)
例如,如果你的数字是3.25,那么计算结果就是3.25 - 3。这将给予0.25

相关问题