sprintf(buff, "%.0f", floatValue)

Hallo zusammen,
wird in diesem Fall gerundet oder werden nur die Kommastellen entfernt?

Gruß
Fred

Hi

Versuch's doch aus und sage uns, was Du herausgefunden hast.
Bauchgefühl: Kommastellen werden abgeschnitten (ist einfacher, als Runden)

MfG

Welcher MC? Auf arduino ist standardmäßig die Unterstützung für float in sprintf nicht enthalten.

Gruß Tommy

Der BME280 ist nicht im Haus, dass ich schnell mal mit Serial.print() testen könnte.
Das ganze Zeugs mit ESP32 & Co. läuft gerade super stabil und ich will unbedingt die 49 Tage Grenze der millis() überschreiten, um zu sehen was die runtime() von fipsok (wie in seiner Zeitschaltuhr) dann liefert.

Der Luftdruck wird als float vom Sensor geliefert.

float BME280::readPressure() {
.....
p = ((p + var1 + var2) >> 8) + (((int64_t)_bme280_calib.dig_P7)<<4);
    return (float)p/256;
}

}
Wer braucht schon den Luftdruck als float außer Wetterdienst, Luft- und Raumfahrt...
Für eine Heim-Wetterstation reicht auch ein unsigned int.

Ahhh, einen hab ich noch (am Raspi). Dann muss der halt dran glauben.

@Tommy56
ESP32

Was hindert Dich daran es einfach mit einer festen Eingabe zu testen?

Serial.printf("%.02f",123.4567);

Gruß Tommy

Der BME280 ist nicht im Haus, dass ich schnell mal mit Serial.print() testen könnte.

brauchst ja auch gar keinen BME dazu.
Definier dir ein float, gib ihm einen Wert,
druck in über sprintf aus und schau, was du als Ergebnis bekommst.
oder kurz so - wie Tommy sagt :wink:

Danke Leute,
warum mache ich nur immer Alles so kompliziert?

float h = 1.654;
char buff[8];
sprintf(buff, "%.2f", h);
Serial.println(buff);
sprintf(buff, "%.1f", h);
Serial.println(buff);
sprintf(buff, "%.0f", h);
Serial.println(buff);

Ausgabe:
1.65
1.7
2

...also rundet sprintf()

Das wollte ich wissen. Danke für den Wink mit dem Zaunpfahl :wink:

Hi

Ebenfalls ein Danke von mir - hätte ich nicht erwartet!

MfG

Der Teensy 3.2 macht das auch so:

1.65
1.7
2

UNO (Quelle):

 float h = 1.654;
  char str[50];
  strcpy(str, "String value using dtostrf: ");
  dtostrf(h, 2, 2, &str[strlen(str)]);
  Serial.println(str);
  strcpy(str, "String value using dtostrf: ");
  dtostrf(h, 2, 1, &str[strlen(str)]);
  Serial.println(str);
  strcpy(str, "String value using dtostrf: ");
  dtostrf(h, 2, 0, &str[strlen(str)]);
  Serial.println(str);
String value using dtostrf: 1.65
String value using dtostrf: 1.7
String value using dtostrf:  2