arduino 添加前导和尾随零

arduino adding leading and trailing zeros

我有一个从 0.001 到 999.999 的浮点数问题:我如何格式化所有范围数字,如下所示:

0.001 变为 000.001

0.002 变为 000.002

0.2 变为 000.200

1.001 变成 001.001

9.090 变为 009.090

99.100 变为 099.100

我最近用 C++ 问了这个问题,得到了很好的答案,但无法将答案转换成 arduino 代码,谢谢

sprintf 是我的第一个想法,但似乎在 arduino 上的浮点数效果不佳:https://www.reddit.com/r/arduino/comments/2fum7c/sprintf_outputs_a_question_mark_when_i_try_to/

下面的代码填充左零,但不适用于负数,如果需要负数,你需要写一些东西来在填充后左移负号。

这是一些示例代码:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() == 0){return;}
  char buff[20];
  float testNumber = Serial.parseFloat();
  Serial.read();
  int stringLength = 7;
  int decimalPrecision = 3;

  dtostrf( testNumber, stringLength, decimalPrecision, buff );
  padZeros(buff);
  leftShiftNegative(buff);

  //clamp max size
  String clampedOutput;
  for(int i = 0;i<7;i++)
  {
    clampedOutput+= buff[i];
  }
  
  Serial.println(clampedOutput);
  delay(1000);
}

void padZeros(char* charStr) //this doesn't handle negative numbers
{
  for (int i = 0; i < strlen(charStr); i++)
  {
    if (charStr[i]==' ')
      charStr[i]='0';
    else
      break;
  }
}

void leftShiftNegative(char* charStr)
{
  for (int i = 0; i < strlen(charStr); i++)
  {
    if (charStr[i]=='-')
    {
      charStr[i]='0';
      charStr[0] = '-';
      return;
    }
  }
}