代码之家  ›  专栏  ›  技术社区  ›  AliBZ

浮点数格式

  •  7
  • AliBZ  · 技术社区  · 16 年前

    我想用 number_format 函数。例如:

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

    这对浮点数有效,但我想对不同的数字使用它。如果一个数字是十进制的,并且没有任何浮点,那么它显示为:145.00。我怎么修这个?我的意思是,我想根据需要显示尽可能多的浮点,而不是更多。

    8 回复  |  直到 9 年前
        1
  •  11
  •   pavium    16 年前

    调查 printf sprintf 函数而不是 number_format .

    它们可以根据您的需要格式化数字。

    printf("%d", $int) 
    

    适用于十进制整数。

    printf("%4.2f", $float) 
    

    适用于两位小数的浮点数。

    数字\格式 似乎是为了实现货币产出的国际化,但我不认为这是你想要的,因为你提到了十进制的“整数”。

        2
  •  7
  •   AliBZ    11 年前

    我想我不能从数字格式中得到我想要的,所以我做了这个,它工作得很好:

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

    谢谢你的回复。

        3
  •  3
  •   Lucas Renan    16 年前

    我不知道更好的方法,但您可以比较类型,如下面的代码:

    $number = 234.159;
    if(is_float($number)) {
     echo number_format($number, 2);
    }else {
     echo $number;
    }
    
        4
  •  2
  •   John Parker    16 年前

    虽然它有点快和脏,你可以简单地做一个…

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

    远离理想,但有效。

        5
  •  1
  •   Cryophallion    16 年前

    我认为关键问题是确定需要多少职位。你能把13.01定义为13吗,因为第一个小数是0?既然printf和number格式需要你知道多少小数,我不知道这对你有用。

    可能是这样(函数很多,但查找前0个,然后返回截断的字符串)。是的,它很密集,但对你来说可能是最好的方式。

    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
      }
    }
    
        6
  •  1
  •   sanmai    16 年前
    rtrim(number_format($number, 2), '0.');
    
        7
  •  0
  •   Kaptkaos    13 年前

    我使用以下方法来消除尾随的零:

    // 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;
    }
    
        8
  •  0
  •   Abanoub    10 年前
    $x = $x - floor($x)
    

    会给你正确的浮点…