Kayan nokta sayı biçimi

6 Cevap php

PHP number_format işlevini kullanmak istiyorum. Örneğin:

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

Bu şamandıra numaraları için çalışır ama farklı numaralar için kullanmak istiyorum. 145,00: bir sayı ondalık ve herhangi kayan noktaları yoksa, bu gibi gösterir. Bunu nasıl düzeltebilirim? Ben daha fazla değil, gerektiği gibi birçok kayan noktaları göstermek istiyorum anlamına gelir.

Şimdiden teşekkürler

6 Cevap

Ben bu yüzden bu yaptım ve gayet iyi çalışıyor number_format istediğini elde edemez düşünüyorum:

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

cevaplar için tüm thanx.

printf ve sprintf işlevleri yerine araştırılması number_format.

Onlar istediğiniz gibi sayıları biçimlendirmek için becerisi kazandırmak.

printf("%d", $int)

Bir ondalık tamsayı için uygun olacaktır.

printf("%4.2f", $float)

İki ondalık basamaklı bir kayan noktalı sayı için uygun olacaktır.

number_format para çıkışı uluslararasılaşma yönelik gibi görünüyor, ama ondalık 'bütün' numaralarını sözü çünkü o ne istediğini sanmıyorum.

Bunu yapmak için daha iyi bir yol bilmiyorum, ama aşağıdaki kodu gibi, tipi karşılaştırabilirsiniz:

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

Biraz hızlı ve kirli iken, sadece bir yapabilirdi ...

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

Uzakta ideal, ama etkili gelen.

Ben anahtar sorun gerekli kaç pozisyon tanımlama olduğunu düşünüyorum. İlk ondalık bir 0 oldu çünkü 13 gibi 13.01 tanımlarsınız? Printf ve sayı biçimi kaç ondalık bilmek sana ihtiyacı beri, ben o sizin için işe yarayacağını bilmiyorum.

Belki böyle bir şey (bir çok fonksiyonu olan, ama ilk 0 arar ve sonra kesik dize döndürür). Evet, bu yoğun, ama sizin için en iyi yol olabilir.

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
  }
}

Ben sondaki sıfırları kurtulmak için aşağıdakileri kullanabilirsiniz:

// 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;
}