题
我想用number_format
功能在PHP。例如:
$number = 234.51;
echo number_format($number,2);
这适用于浮点数,但我想用它为不同的号码。如果一个数字是十进制的,没有任何浮动点,它表明这样的:145.00。我怎样才能解决这个问题?我的意思是我想告诉尽可能多的浮动点根据需要,而不是更多。
解决方案 2
我想,我不能让我从number_format想,所以我做这个工作得很好:
public function floatNumber($number)
{
$number_array = explode('.', $number);
$left = $number_array[0];
$right = $number_array[1];
return number_format($number, strlen($right));
}
感谢名单所有您的答复。
其他提示
调查代替printf
的sprintf
和number_format
功能。
他们给你的愿望格式化数字的能力。
printf("%d", $int)
将适合于一个十进制整数。
printf("%4.2f", $float)
将适合于具有两个小数位浮点数。
number_format
似乎是用于货币输出的国际化,但我不认为这是你想要的,因为你提到的十进制“整体”的数字。
我不知道一个更好的方式来做到这一点,但你可以比较的类型,如下面的代码:
$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)
会给你正确的浮点...
不隶属于 StackOverflow