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() {}