我想number_format
在 PHP 中使用函数。例如:
$number = 234.51;
echo number_format($number,2);
这适用于浮点数,但我想将它用于不同的数字。如果数字是十进制且没有任何浮点数,则显示如下: 145.00 。我怎样才能解决这个问题?我的意思是我想根据需要显示尽可能多的浮点数,而不是更多。
我想number_format
在 PHP 中使用函数。例如:
$number = 234.51;
echo number_format($number,2);
这适用于浮点数,但我想将它用于不同的数字。如果数字是十进制且没有任何浮点数,则显示如下: 145.00 。我怎样才能解决这个问题?我的意思是我想根据需要显示尽可能多的浮点数,而不是更多。
研究printf
andsprintf
函数而不是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));
}
谢谢大家的回复。
我不知道更好的方法来做到这一点,但您可以比较类型,如下面的代码:
$number = 234.159;
if(is_float($number)) {
echo number_format($number, 2);
}else {
echo $number;
}
虽然它有点快速和肮脏,但你可以简单地做一个......
str_replace('.00', '', number_format($potentialFloat, 2));
远非理想,但有效。
我认为关键问题是确定需要多少职位。你会因为第一个小数是 0 而将 13.01 定义为 13 吗?由于 printf 和数字格式需要你知道有多少个小数,我不知道这对你有用。
也许是这样的(这是很多函数,但会查找第一个 0,然后返回截断的字符串)。是的,它是密集的,但它可能是你最好的方式。
函数 show_number($number, $max = 8){ if(strpos($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 第一个零 } 别的 { 返回 substr($number, 0, $decimal+$max+1); //返回最大位置的数字 } } } 别的 { 返回$号;//如果没有小数则返回数字 } }
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)
会给你正确的浮点数......