float valueUp {13.7823};
float valueDown {13.7325};
float valueNeg {-13.73257};
//
// Nur Wertebereich von -2,147,483,648 bis 2,147,483,647.
//
float myRound(float value, byte decimals = 0) {
constexpr unsigned long int powTen[] {1, 10, 100, 1000, 10000, 100000};
constexpr byte powTenMax {sizeof(powTen) / sizeof(powTen[0])};
decimals = (decimals < 0 || decimals > (powTenMax - 2)) ? 0 : decimals;
unsigned long int factor = powTen[decimals + 1];
long int iValue {value * factor}; // Narrowing Warning!
if (iValue != 0) { iValue = ((iValue > 0) ? iValue + 5 : iValue - 5) / 10; }
return static_cast<float>(iValue) * 10 / factor;
}
void setup() {
Serial.begin(115200);
Serial.println(myRound(valueUp), 4); // Runden auf 0 Nachkommastellen
Serial.println(myRound(valueUp, 1), 4); // Runden auf 1 Nachkommastelle
Serial.println(myRound(valueDown, 1), 4); // Runden auf 1 Nachkommastelle
Serial.println(myRound(valueNeg, 3), 4); // Runden auf 3 Nachkommastellen
}
void loop() {}