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;
}
}
}
我有一个从 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;
}
}
}