PHP - number_format根据数字

时间:2015-09-29 08:00:30

标签: php floating-point number-formatting

我有问题以这种方式格式化数字:

Original number: 8.400
Needed number: 8.40
I can use: number_format(floatval($number), 2)

Original number: 1.500
Needed number: 1.50
I can use again: number_format(floatval($number), 2)

Original number: 3.546
Needed number: 3.546
I can use again: Here i dont know what should i use. I need that 3rd decimal

Original number: 10
Needed number: 10.00
I can use again: number_format(floatval($number), 2)

因此,如果数字包含第3个小数位,第3个是0,那么我需要它进行修剪(可以使用例如floatval),但如果第3个小数位不是0,那么我应该离开那个数字完好无损。

3 个答案:

答案 0 :(得分:0)

根据您的规范(即8.450001 => 8.45),以下代码适合您:

// Returns the nth digit of a float
function get_digit($number, $n) { 
    return ($number * pow(10, $n)) % 10;
}

$number = floatval($number);
$number_third_digit = get_digit($number, 3);

if($number_third_digit == 0) {
  echo number_format($number, 2);
}
else {
  echo number_format($number, 3);
}

可以测试代码here

<强>结果

8.500 => 8.50
8.546 => 8.546
8.450001 => 8.45
10 => 10.00

答案 1 :(得分:0)

检查出来:

$number = 8.40;    
$newNumber = ($number == $newnumber=sprintf('%03.2f', $number)) ? $newnumber:$number;

如果sprintf构建的“格式化版本”的浮点值与原始值不同,请保留原始值。否则,请使用格式化版本。

答案 2 :(得分:0)

试试这段代码:

$num = 8.40;
if (strpos($num,'.')>-1) {
    list($int,$dec)=explode('.', $num);
} else {
    $dec = '';
}
if ((strlen($dec)>2 AND $dec[2]==0) OR strlen($dec)<=2) {
    echo number_format(floatval($num),2);
} else {
    echo floatval($num);
}