【发布时间】:2020-09-02 00:10:45
【问题描述】:
我正在尝试将浮点数转换为 char 数组。
sprintf() 对我不起作用,dtostrf 也不起作用。
因为我有一个十进制数的限制(它是 5)我试过这个:
int num = f;
int decimales = (f-num)*10000;
在我输入数字 123.050 之前一切正常。它没有给我小数部分“0.50”,而是给了我一个 5000,因为现在我的“小数”变量是 int,它不计算 0。
还有其他方法可以转换吗?
【问题讨论】:
-
你没有浮点数。您有两个
int值...声明您的浮点数并使用int chars_reqd = snprintf (NULL, 0, "%.5f", fvalue);然后分配chars_reqd + 1字符或使用固定数组,例如char floatstr[64];和sprintf (floatstr, "%.5f", fvalue); -
使用 sprintf(cad,"%.5f", f) 对你也不起作用?
-
(a) 解释为什么
sprintf不适合您。 (b) 完整地解释你想要的输出。小数部分是否应该总是正好有五位数字?最多5个?整数部分有限制吗?非常大(1e300)或非常小(1e-300)的数字呢?负数呢? (c) 10000 乘以 .05 是 500,而不是 5000。您的示例中的错误是 10000、5000 还是其他? (d) 数字是否应该四舍五入或截断为五位小数?舍入或截断中的小错误是否重要? -
请确认您需要 4 位小数,正如
10000所建议的那样。
标签: c floating-point char type-conversion microcontroller