Расширенное форматирование числа Php - PullRequest
0 голосов
/ 15 сентября 2011

Я хочу, чтобы число PHP форматировалось как минимум с двумя десятичными знаками и максимум с 8 знаками после запятой. Как вы можете сделать это правильно.

Обновление: извините, мой вопрос, скажем, у меня есть номер "4". Я хочу, чтобы он отображался как «4.00», и если у меня есть «2.000000001», то он отображается как «2.00» или, если у меня «3.2102», он будет отображаться как таковой. На iPhone есть средство форматирования NSNumber, что эквивалентно PHP.

Ответы [ 5 ]

7 голосов
/ 15 сентября 2011

Форматирует число $ n для 8 десятичных знаков, затем удаляет завершающий ноль, максимум 6 раз.

$s = number_format($n, 8);
for($i=0; $i<8-2; $i++) {
    if (substr($s, -1) == '0')
        $s = substr($s, 0, -1);
}
print "Number = $s";
0 голосов
/ 17 мая 2016

Используя preg_match , просто получите ноль, заканчивающийся на, и затем запустите его

<?php 
$nn = number_format(10.10100011411100000,13);
preg_match('/[0]+$/',$nn,$number);
if(count($number)>0){
    echo rtrim($nn,$number[0]);
}

Надеюсь, это поможет вам.

0 голосов
/ 15 сентября 2011

Я не понимаю, почему вы хотите отображать цифры с непоследовательной степенью точности. Я тоже не понимаю, какой шаблон вы пытаетесь описать в своем комментарии.

Но давайте предположим, что вам нужно следующее поведение: вы хотите выразить число до 8 десятичных знаков, а если в результате более двух конечных нулей, вы хотите удалить лишние нули. Это не намного сложнее, чем код на английском языке. В псевдокоде:

$mystring = string representation of number rounded to 8 decimal places;
while (last character of $mystring is a 0) {
    chop off last character of $mystring;
}
0 голосов
/ 15 сентября 2011

Проверьте функцию числового формата:

<?php
$num = 43.43343;
$formatted = number_format(round((float) $num, 2), 2);
?>

http://php.net/manual/en/function.number-format.php

0 голосов
/ 15 сентября 2011

Используйте sprintf() для форматирования числа с определенным количеством десятичных знаков:

$decimal_places = 4;
$format = "%.${decimal_places}f";
$formatted = sprintf($format,$number);
...