📌  相关文章
📜  将浮点数转换为C中的字符串

📅  最后修改于: 2021-05-25 19:12:30             🧑  作者: Mango

编写一个C函数ftoa(),将给定的浮点数或双精度数转换为字符串。不允许将标准库函数用于直接转换。以下是ftoa()的原型。本文提供了将C double转换为字符串的见解。

ftoa(n, res, afterpoint)
n          --> Input Number
res[]      --> Array where output string to be stored
afterpoint --> Number of digits to be considered after the point.

例子:

  • ftoa(1.555,str,2)应在res中存储“ 1.55”。
  • ftoa(1.555,str,0)应在res中存储“ 1”。


强烈建议您最小化浏览器,然后自己尝试。

一种简单的方法是使用sprintf(),但不允许将标准库函数用于直接转换。

方法:想法是将整数部分和小数部分分开,并将它们分别转换为字符串。以下是详细步骤。

  1. 从浮点数或双数中提取整数部分。
  2. 首先,将整数部分转换为字符串。
  3. 从n中提取精确的整数部分作为分数部分。
  4. 如果d不为零,请执行以下操作。
    1. 通过将小数部分乘以pow(10,d)将其转换为整数
    2. 将整数值转换为字符串,然后追加到结果中。

以下是上述方法的C实现。

// C program for implementation of ftoa()
#include 
#include 
  
// Reverses a string 'str' of length 'len'
void reverse(char* str, int len)
{
    int i = 0, j = len - 1, temp;
    while (i < j) {
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
        i++;
        j--;
    }
}
  
// Converts a given integer x to string str[]. 
// d is the number of digits required in the output. 
// If d is more than the number of digits in x, 
// then 0s are added at the beginning.
int intToStr(int x, char str[], int d)
{
    int i = 0;
    while (x) {
        str[i++] = (x % 10) + '0';
        x = x / 10;
    }
  
    // If number of digits required is more, then
    // add 0s at the beginning
    while (i < d)
        str[i++] = '0';
  
    reverse(str, i);
    str[i] = '\0';
    return i;
}
  
// Converts a floating-point/double number to a string.
void ftoa(float n, char* res, int afterpoint)
{
    // Extract integer part
    int ipart = (int)n;
  
    // Extract floating part
    float fpart = n - (float)ipart;
  
    // convert integer part to string
    int i = intToStr(ipart, res, 0);
  
    // check for display option after point
    if (afterpoint != 0) {
        res[i] = '.'; // add dot
  
        // Get the value of fraction part upto given no.
        // of points after dot. The third parameter 
        // is needed to handle cases like 233.007
        fpart = fpart * pow(10, afterpoint);
  
        intToStr((int)fpart, res + i + 1, afterpoint);
    }
}
  
// Driver program to test above function
int main()
{
    char res[20];
    float n = 233.007;
    ftoa(n, res, 4);
    printf("\"%s\"\n", res);
    return 0;
}
输出:
"233.0070"

注意:如果使用double类型而不是float类型,则程序将执行类似的操作。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”