Ich möchte wissen, ob es eine Funktion gibt, mit der eine Zahl automatisch nach Dezimalzahl formatiert wird. Wenn ich also Folgendes habe:
<?php
// $sql_result["col_number"] == 1,455.75
number_format ($sql_result["col_number"], 2, ".", "");
// will return 1455.75
// $sql_result["col_number"] == 1,455.00
number_format ($sql_result["col_number"], 2, ".", "");
// could I get 1455 instead of 1455.00?
?>
meine Antwort ist also, ob es eine Möglichkeit gibt, die Dezimalzahlen zu entfernen, wenn ich in meiner Datenbank nur DECIMAL-Datenforma habe, wenn es rund ist?
Oder soll ich so etwas tun?
<?php
// $sql_result["col_number"] == 1,455.00
str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", ""));
// will return 1455
?>
Ich denke wirklich, dass Ihr Workaround so gut ist wie jeder andere. Es ist einfach und klar und es hat wirklich keinen Sinn, hier von Leistung zu sprechen, also machen Sie es einfach.
floatval oder einfach gießen, um zu schweben
php > echo floatval(7.00);
7
php > echo floatval(2.30);
2.3
php > echo floatval(1.25);
1.25
php > echo floatval(1.125);
1.125
php > echo (float) 7.00;
7
php > echo (float) 2.30;
2.3
php > echo (float) 1.25;
1.25
php > echo (float) 1.125;
1.125
Wie Emil sagt, deine sind gut. Wenn Sie jedoch 0
von z. 7.50
auch, ich habe einen Vorschlag, rtrim()
:
<?php
// if $sql_result["col_number"] == 1,455.50
rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.');
// will return 1455.5
?>
Ich füge den Artikel Remove useless zero digit aus Dezimalzahlen in PHP hinzu, um den Wert auf eine schönere Art und Weise zu reinigen, falls dies nicht erforderlich ist.
Sie können auch rtrim () verwenden, um überschüssige 0s zu entfernen, falls Sie eine Dezimalstelle beibehalten möchten, die überschüssigen Nullen jedoch nicht. (Beispiel: 4.50 wird zu 4.5.) Außerdem können Sie die Anzahl der Dezimalstellen von 2 auf eine beliebige andere Zahl ändern.
rtrim(rtrim((string)number_format($value, 2, ".", ""),"0"),".");
// 4.00 -> 4
// 4.50 -> 4.5
// 4.54000000 -> 4.54 (if you're doing more decimal places)
Ich denke, der sauberste Weg, den ich mir vorstellen kann, um dies für jemanden zu tun, der gerade nach so etwas gesucht hat, ist folgendes zu tun:
( number_format ($sql_result["col_number"], 2) * 100 ) / 100;
Wenn Sie auf US-Währung abzielen, benutze ich diese Methode:
function moneyform($number, $symbol = true) {
return str_replace(".00", "", money_format(($symbol? '%.2n' : "%!n"), $number));
}
moneyform(1300999);
-->$1,300,999
moneyform(2500.99);
-->$2,500.99
moneyform(2500.99, false);
-->2,500.99
Mir wurde vorgeworfen, so etwas zu tun:
floatval($foo) == intval($foo) ? number_format($foo) : number_format($foo,2);
Warren.S Antwort hat mir geholfen. Ich habe die number_format-Funktion nicht benötigt, also habe ich das einfach gemacht
$value=$value-0;
Im Fall des OP benötigt er number_format, um die Kommas zu entfernen. Das würde also für ihn funktionieren
$value=number_format ($sql_result["col_number"], 2, ".", "")-0;
Da ich keine flexible Lösung finden konnte, schrieb ich eine einfache Funktion, um das beste Ergebnis zu erzielen:
function getValueFormattedWithMinimalDecimals($value, $max_decimals = 2, $dec_point = ',', $thousands_sep = '') {
$bestNumberOfDecimals = -1;
$decimal = 0;
while ($decimal <= $max_decimals) {
$bestNumberOfDecimals = $decimal;
$valueDecimals = number_format($value, $decimal);
if (floatval($value) == $valueDecimals) {
break;
}
$decimal++;
}
if($bestNumberOfDecimals > 0 && number_format($value, $bestNumberOfDecimals) == number_format($value, 0)) {
$bestNumberOfDecimals = 0;
}
return number_format($value, $bestNumberOfDecimals, $dec_point, $thousands_sep);
}