Question

Je veux utiliser la fonction number_format en PHP. Par exemple:

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

Cela fonctionne pour les nombres flottants mais je veux l'utiliser pour des numéros différents. Si un nombre est décimal et n'a pas de points flottants, il montre comme: 145,00. Comment puis-je réparer cela? Je veux dire que je veux montrer autant de points flottants au besoin, pas plus.

Était-ce utile?

La solution 2

Je pense que je ne peux pas obtenir ce que je veux de number_format donc je l'ai fait et il fonctionne très bien:

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

Thanx tous pour vos réponses.

Autres conseils

Enquêter sur les fonctions de printf et sprintf au lieu de number_format.

Ils donnent la possibilité de formater les numéros que vous le souhaitez.

printf("%d", $int) 

serait approprié pour un entier décimal.

printf("%4.2f", $float) 

serait approprié pour un nombre à virgule flottante avec deux décimales.

number_format semble être destiné à l'internationalisation de la production monétaire, mais je ne pense pas que ce soit ce que vous voulez parce que vous avez mentionné nombres décimaux « entiers ».

Je ne sais pas de meilleure façon de le faire, mais vous pouvez comparer le type, comme le code ci-dessous:

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

Alors qu'il est un peu rapide et sale, vous pouvez simplement faire ...

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

Loin d'être idéale, mais efficace.

Je pense que le principal problème est de définir combien de postes sont nécessaires. Voulez-vous définir comme 13.01 13 parce que la première décimale était un 0? Depuis printf et le format de numéro a besoin de savoir combien de décimales, je ne sais pas que cela pourrait fonctionner pour vous.

Peut-être quelque chose comme ça (ce qui est beaucoup de fonctions, mais il semble pour la première 0, puis retourne la chaîne tronquée). Oui, il est intense, mais il est peut-être la meilleure façon pour vous.

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.');

J'utilise ce qui suit pour se débarrasser des zéros:

// 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)

vous donnera le droit à virgule flottante ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top