Hier erhalte ich zwei Dezimalstellen nach dem .
(Punkt) mit einer Funktion...
function truncate_number($zahl, $genauigkeit = 2) {
// Null verursacht Probleme und muss nicht gekürzt werden
if (0 == (int)$zahl) {
return $zahl;
}
// Sind wir negativ?
$negativ = $zahl / abs($zahl);
// Wandle die Zahl in eine positive um, um Rundungsfehler zu beheben
$zahl = abs($zahl);
// Genauigkeit für Division / Multiplikation berechnen
$genauigkeit = pow(10, $genauigkeit);
// Die Berechnungen durchführen und den negativen Wert auf das Ergebnis anwenden, um sicherzustellen,
// dass das Ergebnis wieder korrekt negativ / positiv ist
return floor( $zahl * $genauigkeit ) / $genauigkeit * $negativ;
}
Ergebnisse aus der obigen Funktion:
echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789); // 2.56
echo truncate_number(2.56789, 3); // 2.567
echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789); // -2.56
echo truncate_number(-2.56789, 3); // -2.567
Neue korrekte Antwort
Verwenden Sie die PHP-eigene BC Math-Funktion bcdiv
echo bcdiv(2.56789, 1, 1); // 2.5
echo bcdiv(2.56789, 1, 2); // 2.56
echo bcdiv(2.56789, 1, 3); // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567
21 Stimmen
Das ist wirklich kein "Runden". Runden reduziert die Genauigkeit. Es fügt keine Dezimalstellen zu einer Zahl hinzu, die diese nicht hat. Basierend auf vielen der Antworten und Kommentare scheint es, dass die Leute denken, dass Runden etwas ist, was es nicht ist.
runden
ist eine mathematische Funktion, und das ist nur ein Formatierungsproblem.