Vor dem Komma alles streichen
Sabi
- php
In meiner Variable steht
$wert = 0.34;
ich möchte gerne, alles was vor dem Komma ist streichen. Ich habe zwar alles gefunden zum runden und kürzen nach dem Komma, aber nichts für Vor dem Komma!
Gibt es da so etwas nicht?
Sabi
Hallo Sabi,
$wert = 0.34;
ich möchte gerne, alles was vor dem Komma ist streichen. Ich habe zwar alles gefunden zum runden und kürzen nach dem Komma, aber nichts für Vor dem Komma!
Gibt es da so etwas nicht?
Brauchst du die Zahl ‚34‘?
Matthias
@@Matthias Apsel
Brauchst du die Zahl ‚34‘?
0.34 ergibt 34, aber 0.3 ergibt 3?
Macht nicht wirklich Sinn, oder?
LLAP 🖖
Moin!
@@Matthias Apsel
Brauchst du die Zahl ‚34‘?
0.34 ergibt 34, aber 0.3 ergibt 3?
Das denke ich, war nicht gemeint:
Ausgangswerte:
0.34 / 0.3 / 1.3
Ziel: "Alles vor dem Komma alles streichen":
.34 / .3 / 1.3
Ich denke nämlich und Hilfe der Kristallkugel, "Sabi" meint tatsächlich die führenden Nullen und ergänze das mal durch "auch nachfolgende Nullen":
<?php
$n=0.34;
$s=preg_replace('/0+$/','', preg_replace ('/^0/', '', sprintf('%f', $n)));
echo $s, "\n";
Von innen nach außen:
Anders (besser, schlanker) formuliert:
<?php
$n=0.34;
$ar[]='/0+$/'; # Nullen hinten
$ar[]='/^0/'; # eine Null vorn
$s=preg_replace($ar, '', sprintf('%f', $n));
echo $s, "\n";
als Funktion:
<?php
function numToShortString($n) {
return preg_replace(array ('/0+$/', '/^0/'), '', sprintf('%f', $n));
}
echo numToShortString(0.34), "\n";
echo numToShortString(0.3), "\n";
echo numToShortString(1.3), "\n";
Ergebnisse:
.34
.3
1.3
Jörg Reinholz
Moin!
<?php function numToShortString($n) { return preg_replace(array ('/0+$/', '/^0/'), '', sprintf('%f', $n)); } echo numToShortString(0.34), "\n"; echo numToShortString(0.3), "\n"; echo numToShortString(1.3), "\n";
Da fällt mir ein, dass negative Werte eventuell berücksichtigt werden müssen:
<?php
function numToShortString($n, $german=false) {
$vorzeichen = ($n < 0 ) ? '-' : '';
$n=abs($n);
if (! $german) {
return $vorzeichen . preg_replace(array ('/0+$/', '/^0/'), '', sprintf('%f', $n));
} else {
return $vorzeichen . str_replace('.', ',' , preg_replace(array ('/0+$/', '/^0/'), '', sprintf('%f', $n)));
}
}
## Tests
/*
echo numToShortString(0.34), "\n";
echo numToShortString(0.3), "\n";
echo numToShortString(1.3), "\n";
echo numToShortString(-0.34), "\n";
echo numToShortString(-0.3), "\n";
echo numToShortString(-1.3), "\n";
echo "\n";
echo numToShortString(0.34, true), "\n";
echo numToShortString(0.3, true), "\n";
echo numToShortString(1.3, true), "\n";
echo numToShortString(-0.34, true), "\n";
echo numToShortString(-0.3, true), "\n";
echo numToShortString(-1.3, true), "\n";
# */
Will man noch mehr, dann sollte sich auch number_format()
ansehen
Jörg Reinholz
@@Sabi
$wert = 0.34;
ich möchte gerne, alles was vor dem Komma ist streichen.
Du willst den Nachkomma-Anteil?
In dem Fall also 0.34? Und für 12.34 soll auch 0.34 rauskommen?
Gibt es da so etwas nicht?
In PHP gibt’s dafür AFAIS keine eigene Funktion. Du kannst aber von deinem Wert den ganzzahligen Anteil abziehen.
Für negative Zahlen müsste man eine Fallunterscheidung machen, wenn das erforderlich sein sollte.
LLAP 🖖
Hallo Gunnar,
Gibt es da so etwas nicht?
In PHP gibt’s dafür AFAIS keine eigene Funktion. Du kannst aber von deinem Wert den ganzzahligen Anteil abziehen.
Für negative Zahlen müsste man eine Fallunterscheidung machen, wenn das erforderlich sein sollte.
Deshalb (und weil es schneller ist, für die Micro-Optimierer) wird in diesem Fall idR ein Typecast verwendet:
$a = -10.4;
$b = 10.4;
var_dump($a - (int)$a, $b - (int)$b);
# gibt als Ausgabe:
#
# float(-0.4)
# float(0.4)
LG,
CK
Aloha ;)
In meiner Variable steht
$wert = 0.34;
ich möchte gerne, alles was vor dem Komma ist streichen. Ich habe zwar alles gefunden zum runden und kürzen nach dem Komma, aber nichts für Vor dem Komma!
Die Frage ergibt keinen Sinn - vor allem nicht mit diesem Beispiel. Mal geraten: du willst lediglich die Nachkommastellen, also von 12,34 nur 0,34 übrig behalten. "Kürzen vor dem Komma", Ja? In dem Fall wäre die Lösung
$wert = 12.34;
$wert = $wert - floor($wert);
echo $wert; // 0.34
Oder meintest du z.B. Runden auf 100er? Das kannst du durch Setzen eines negativen precision-Argument in der round-Funktion erhalten; siehe example #1 im Handbuch...
Grüße,
RIDER
@@Camping_RIDER
In dem Fall wäre die Lösung
$wert = 12.34; $wert = $wert - floor($wert); echo $wert; // 0.34
Mit „in dem Fall“ meinst du „für diesen Wert“?
$wert = -12.34;
$wert = $wert - floor($wert);
echo $wert; // 0.66
LLAP 🖖
Aloha ;)
In dem Fall wäre die Lösung
$wert = 12.34; $wert = $wert - floor($wert); echo $wert; // 0.34
Mit „in dem Fall“ meinst du „für diesen Wert“?
$wert = -12.34; $wert = $wert - floor($wert); echo $wert; // 0.66
ACK.
$wert = $wert - (($wert < 0) ? ceil($wert) : floor($wert));
Grüße,
RIDER
@@Camping_RIDER
$wert = $wert - (($wert < 0) ? ceil($wert) : floor($wert));
Sowas in der Art hatte ich auch im Sinn; aber ist nicht CKs Lösung besser?
LLAP 🖖
Moin!
aber ist nicht CKs Lösung besser?
Nun, wir haben hier brauchbare Lösungen angeboten, die sich zunächst im einem Punkt unterscheiden: nämlich der Interpretation der Frage - und deshalb auch zu ganz verschiedenen Ergebnissen führen.
Da sich Sabi aber gestern auf Nimmerwiedersehen verabschiedet hat werden wir wohl nie wissen, was diese meinte bzw. wollte.
Jörg Reinholz
Aloha ;)
$wert = $wert - (($wert < 0) ? ceil($wert) : floor($wert));
Sowas in der Art hatte ich auch im Sinn; aber ist nicht CKs Lösung besser?
Doch, schätzungsweise schon - auf PHP bezogen ist CKs Lösung wohl die günstigere. Ich wollte die hier nur auch mal ausdrücklich aufschreiben - und wenn man unabhängig von PHP denkt kann es auch mal dazu kommen, dass in einer anderen Programmiersprache Typecasts nicht so günstig einzusetzen sind, es macht also Sinn, CKs Lösung zu verwenden und die andere trotzdem im Hinterkopf zu behalten.
Grüße,
RIDER