【发布时间】:2012-12-18 06:49:03
【问题描述】:
我有以下 Arduino 草图代码:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
static FILE lcdout = {0} ;
static int lcd_putchar(char ch, FILE* stream)
{
lcd.write(ch) ;
return (0) ;
}
void setup() {
lcd.begin(16, 2);
fdev_setup_stream (&lcdout, lcd_putchar, NULL, _FDEV_SETUP_WRITE);
}
void loop()
{
stdout = &lcdout;
printf("%.2f Volts", 2.0);
}
问题出现在代码的最后一行。这应该打印出“2.00 Volts”,而是打印出“? Volts”(一个问号,而不是实际的浮点值)。如果我尝试格式化整数,这很好用。
所以基本上,如果我将 printf 行替换为以下内容,它将正常工作:
printf("%d Volts", 2); //prints correctly "2 Volts"
知道有什么问题吗?
【问题讨论】:
-
一个无法处理浮点转换的愚蠢标准库?
-
有趣的是,如果你只做一个 lcd.print(2.0) 它会打印出你想要的东西。不需要 sprintf 或任何其他。您可以使用可选的第二个参数指定小数点右边的位数。例如。 lcd.print(2,3) 会给你“2.000”。