Php 浮点数格式

Php 浮点数格式,php,floating-point,number-formatting,Php,Floating Point,Number Formatting,我想在PHP中使用number\u格式函数。例如: $number = 234.51; echo number_format($number,2); 这适用于浮点数,但我想用于不同的数。如果一个数字是十进制的并且没有任何浮点数,它会显示为:145.00。我怎样才能解决这个问题?我的意思是我想根据需要显示尽可能多的浮点,而不是更多。研究printf和sprintf函数,而不是number\u格式 它们可以根据您的需要格式化数字 printf("%d", $int) 适用于十进制整数 prin

我想在PHP中使用
number\u格式
函数。例如:

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

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

研究
printf
sprintf
函数,而不是
number\u格式

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

printf("%d", $int) 
适用于十进制整数

printf("%4.2f", $float) 
适用于小数点后两位的浮点数


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

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

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

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

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

远非理想,但很有效。

我想我无法从数字格式中得到我想要的东西,所以我这样做了,效果很好:

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

谢谢你的回复。

我认为关键问题是确定需要多少职位。您是否会将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 } } 函数show_number($number,$max=8){ 如果(STRPO($number,'.')){ $decimal=strpos($number,'.'); if(strpos($number,.0')){ return substr($number,0,$decimal);//如果第一个是零,则返回整数 }否则{ if(strpos(substr($number,$decimal,$max),'0')){ $zero=strpos(substr($number,$decimal,$max),'0'); return substr($number,0,$decimal+$zero);//返回数字w/0第一个零 }否则{ return substr($number,0,$decimal+$max+1);//返回最大位数的数字 } } }否则{ return$number;//如果没有小数,则返回number } }
我使用以下方法去除尾随的零:

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

将为您提供正确的浮点…

您是否尝试过使用round()而不是number_格式()?据我所知,number_格式只应用于显示目的。如果您不需要打印此内容,我相信这是首选的方式。您可以缩短它并编写:
list($left,$right)=explode('.',$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)