2009-11-14 68 views
7

我想在PHP中使用number_format函数。例如:浮点数格式

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

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

+0

您是否尝试过使用圆形( )而不是number_format()? – 2009-11-14 20:11:48

+0

在我的理解中,number_format只能用于显示目的。 – kta 2014-11-27 11:51:54

回答

6

我想我不能让我从number_format想,所以我做这个工作得很好:

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

感谢名单所有您的答复。

+2

你可以缩短并写下:'list($ left,$ right)= explode('。',$ number,2);'。 – 2014-01-27 20:59:48

11

调查printfsprintf函数而不是number_format

它们提供了根据需要格式化数字的功能。

printf("%d", $int) 

将适用于十进制整数。

printf("%4.2f", $float) 

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

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

3

我不知道一个更好的方式来做到这一点,但你可以比较的类型,如下面的代码:

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

我相信这是首选的方式,如果你不需要打印这个。 – Dewsworld 2012-03-01 04:23:48

2

虽然这是一个有点快速和肮脏的,你可以简单地做一个..

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

远非理想,但有效。

1

我认为关键问题是定义需要多少位置。你会定义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 
    } 
} 
1
rtrim(number_format($number, 2), '0.'); 
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; 
} 
0
$x = $x - floor($x) 

会给你正确的浮点...