Умные десятизначные числа

161
22 апреля 2018, 21:58

Добрый день, ребята подскажите реализацию функции умных десятичных чисел, простая реализация округлений не подходит так как цифры могу быть десятизначные а могут и не быть

задача такая что есть расчеты и может быть цифра

 1) 0,00025325
 2) 0,0000000225
 3) 0.02501 

и мне нужно в каждом числе показать два символа после нулей, к примеру:

0,00025 
0,000000022
0.025

как можно реализовать чтото подобное в одной функции ?

Как я вижу решение, но помоему функция сложновата и хотелось бы проще

 public static function numbersAfterDecimalPoint($number)
    {
        $number = number_format($number, 10, ',', ' ');
        $breakUpNumber = explode(",", $number);
        if(!isset($breakUpNumber[1])){
            return $number;
        }
        $lang = iconv_strlen($breakUpNumber[1]);
        $number = '';
        $counter = 0;
        for ($i = 0; $i < $lang; $i++){
           if($breakUpNumber[1][$i] == '0'){
               $number .=  $breakUpNumber[1][$i];
           }else{
               $number .= $breakUpNumber[1][$i];
               $counter++;
               if($counter == 2){
                   break;
               }
           }
        }
        if($counter == 0){
            return  number_format($number, 2, ',', ' ');
        }
        return  $breakUpNumber[0].','.$number;
    }
Answer 1
preg_replace('/([0-9]*)([.,])(0*)([1-9]{0,2}).*/', '$1$2$3$4', $myNumber);
Answer 2

поскольку вы в своем решении работаете с числами как со строками, то можно просто использовать регулярные выражения

$data = [
     0.00025325,
     0.0000000225,
     0.02501,
     0.1
  ];
foreach($data as $d){
    $str = number_format(10, $d, ',', '') ;
    if(preg_match('/(\d+)[.,]0*(\d{1,2})/', $str, $matches)){
        print_r([$matches[0]]);
    }
}

Предложу еще математический вариант без регулярок (в данном случае, когда целая часть равна 0), но он не совсем точен, кажется.

foreach($data as $d){
    $l = log10($d);
    print_r([  number_format($d, -floor($l)+1, ',', '') ]);
}
Answer 3

у меня получилось таким способом

       return preg_replace('/([0-9]*)([.,])(0*)([1-9]{0,2}).*/', '$1$2$3$4', number_format($number, 10, ',', ' '));
READ ALSO
Подключение шаблонов в Wordpress

Подключение шаблонов в Wordpress

Здравствуйте, мне нужно подключить некоторые категории (рубрики) в отдельные шаблоны

146
Нужен совет по хранению фотографий для сайта обьявлений

Нужен совет по хранению фотографий для сайта обьявлений

Есть небольшой проект - сайт с объявлениями, где есть объявление и фотографии к немуЯ расскажу как сделал обработку и хранение фотографий,...

132
Помогите php mysql

Помогите php mysql

Помогите пожалуйста, есть скрипт и всё такое, он выводит новости из ДБ, мне надо что бы была возможность, добавлять в таблицу лайк, типо имеется...

132
Замена символов в строке (PHP)

Замена символов в строке (PHP)

Есть строкаЕсть массив, в котором записанно все вот так: "a" => "****",

145