繁体   English   中英

浮点数格式

[英]Floating point number format

我想在PHP中使用number_format函数。 例如:

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

这适用于浮点数,但我想将它用于不同的数字。 如果数字是十进制且没有任何浮点数,则显示如下:145.00。 我怎样才能解决这个问题? 我的意思是我想根据需要显示尽可能多的浮点数,而不是更多。

调查printfsprintf函数而不是number_format

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

printf("%d", $int) 

适用于十进制整数。

printf("%4.2f", $float) 

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

number_format似乎是用于货币输出的国际化,但我不认为这是你想要的,因为你提到了小数“整数”。

我想我无法从number_format得到我想要的东西,所以我做了这个并且它工作正常:

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

thanx all for your replies。

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

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

虽然它有点快速和肮脏,你可以简单地做...

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

远非理想,但有效。

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

也许是这样的(这是很多函数,但是查找前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
  }
}
rtrim(number_format($number, 2), '0.');

我使用以下内容来摆脱尾随零:

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

会给你正确的浮点数......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM