double to char* 没有任何外部方法

Posted

技术标签:

【中文标题】double to char* 没有任何外部方法【英文标题】:double to char* without any external methods 【发布时间】:2014-03-12 12:31:56 【问题描述】:

我正在尝试将 C 中的双精度数转换为 char* 数组,但我无法使用 sprintf 等方法或 stdlib 库之外的任何方法。我正在尝试一种数学方法,在其中找到位数+点号并将每个数字放入数组中,但是当精度很高时真的很难,比如 102.45555

关于如何实现这一点的任何想法?

【问题讨论】:

为什么不能使用标准库函数? 这是不能使用 sprintf 的作业吗? 如何将其表示为字符?例如,您想像这样获取字符'1'、'0'、'2'、'.'、'4'等? Convert Double/Float to string 的可能重复项 提示:***.com/questions/2594913/… 【参考方案1】:

您可以采用这种方法:

cast the double to an int, then store the digits of the int in the char array
append the decimal point
subtract the int from the double
while you don't have sufficient number of digits after decimal point:
    multiply the double by 10
    cast it to int and append it to the array
    subtract the int from the double

【讨论】:

【参考方案2】:

好吧,我将采用这种方法:

先打印出整数部分:

double value = 123.456
char buffer[50];
int bufferSize = 0;

int intPart = (int)value;
//find the size of the intPart by repeatedly dividing by 10
int tmp = intPart, size = 0;
while(tmp)
    size++;
    tmp /= 10;

//print out the numbers in reverse
for(int i = size-1; i >= 0; i--)
    buffer[i] = (intPart % 10) + '0';
    intPart /= 10;

bufferSize += size;

现在您已经打印出整数部分,是时候打印出小数部分了。我接近它的方法是将它乘以十,直到它是一个整数。

value -= intPart;
while(floor(value) != value)
  value *= 10;

现在我将重复上面的相同过程:

intPart = (int)value;
//find the size of the intPart by repeatedly dividing by 10
tmp = intPart, size = 0;
while(tmp)
    size++;
    tmp /= 10;

//print out the numbers in reverse
for(int i = size-1; i >= 0; i--)
    buffer[bufferSize + i] = (intPart % 10) + '0';
    intPart /= 10;

bufferSize += size;

最后是画龙点睛:

buffer[bufferSize] = 0;

【讨论】:

您的 foor 循环需要 i-- 而不是因为您正在向后移动。好主意,但不适用于带有 0 的大小数,例如 123.45600005

以上是关于double to char* 没有任何外部方法的主要内容,如果未能解决你的问题,请参考以下文章

Sqlmysql类似to_char()to_date()函数mysql日期和字符相互转换方法date_f

将双精度转换为字符数组 C++

Arduino中数据类型转换 float/double转换为char 亲测好使,dtostrf()函数

mysql中 double(6,2)是啥意思

Oracle to_char(参数,'FM990.00')函数

error LNK2019: 无法解析的外部符号