Frage

Ich möchte benutzen number_format Funktion in PHP. Zum Beispiel:

$number = 234.51;
echo number_format($number,2);

Dies funktioniert für Float -Nummern, aber ich möchte es für verschiedene Zahlen verwenden. Wenn eine Zahl dezimal ist und keine schwimmenden Punkte hat, zeigt sie: 145,00. Wie kann ich das beheben? Ich meine, ich möchte so viele schwimmende Punkte wie nötig zeigen, nicht mehr.

War es hilfreich?

Lösung 2

Ich denke, ich kann nicht das bekommen, was ich von Number_Format will, also habe ich das getan und es funktioniert gut:

 public function floatNumber($number)
 {
      $number_array = explode('.', $number);
      $left = $number_array[0];
      $right = $number_array[1];
      return number_format($number, strlen($right));
 }

Vielen Dank für Ihre Antworten.

Andere Tipps

Untersuchen printf und sprintf Funktionen statt von number_format.

Sie geben die Fähigkeit, Zahlen zu formatieren, wie Sie möchten.

printf("%d", $int) 

wäre für eine Dezimalbezahlung geeignet.

printf("%4.2f", $float) 

wäre für eine schwimmende Punktzahl mit zwei Dezimalstellen geeignet.

number_format Scheint für die Internationalisierung der Währungsleistung bestimmt zu sein, aber ich glaube nicht, dass Sie das wollen, weil Sie dezimale "ganze" Zahlen erwähnt haben.

Ich kenne keinen besseren Weg, dies zu tun, aber Sie können den Typ wie der folgende Code vergleichen:

$number = 234.159;
if(is_float($number)) {
 echo number_format($number, 2);
}else {
 echo $number;
}

Während es ein bisschen schnell und schmutzig ist, könnten Sie einfach ein ...

str_replace('.00', '', number_format($potentialFloat, 2));

Weit entfernt von ideal, aber effektiv.

Ich denke, das Hauptproblem besteht darin, zu definieren, wie viele Positionen benötigt werden. Würden Sie 13.01 als 13 definieren, weil die erste Dezimalzahl eine 0 war? Da das Printf- und Zahlenformat Sie benötigen, um zu wissen, wie viele Dezimalstellen, weiß ich nicht, dass dies für Sie funktionieren würde.

Vielleicht so etwas (was viele Funktionen ist, sucht aber nach den ersten 0 und gibt dann die verkürzte Zeichenfolge zurück). Ja, es ist intensiv, aber es kann der beste Weg für Sie sein.

function show_number($number, $max = 8){
  if(strpos($number, '.')){
    $decimal = strpos($number, '.');
    if(strpos($number, '.0')){
      return substr($number, 0, $decimal);//returns whole if zero is first
    } else {
      if(strpos(substr($number, $decimal, $max), '0')){
        $zero = strpos(substr($number, $decimal, $max), '0');
        return substr($number, 0, $decimal+$zero);//returns number w/0 first zero
      } else {
        return substr($number, 0, $decimal+$max+1); //returns number with max places
      }
    }
  } else {
    return $number; //returns number if no decimals
  }
}
rtrim(number_format($number, 2), '0.');

Ich benutze Folgendes, um nachverfolgende Nullen loszuwerden:

// Trims a floating point number so there are no trailing zeros. For example:
// 1.00 -> 1
// 1.10 -> 1.1
function trimFloatingPoint($input) {
    $strNum = strval($input);

    while(substr($strNum, -1, 1) == '0')
        $strNum = substr($strNum, 0, strlen($strNum) -1);

    // Trailing zeros are gone. How about the trailing period?
    if(substr($strNum, -1, 1) == '.')
        $strNum = substr($strNum, 0, strlen($strNum) -1);

    return $strNum;
}
$x = $x - floor($x)

Ich werde dir den richtigen schwimmenden Punkt geben ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top