Каков точный эквивалент JS: something.toFixed() в PHP?

Если у меня есть a.toFixed(3); в javascript ('a', равный 2.4232), что такое точная эквивалентная команда в php для ее получения? Я искал его, но не нашел подходящего объяснения, прилагаемого к ответам.

Ответ 1

Я обнаружил, что sprintf и number_format оба вокруг числа, поэтому я использовал это:

$number = 2.4232;
$decimals = 3;
$expo = pow(10,$decimals);
$number = intval($number*$expo)/$expo; //  = 2423/100

Ответ 2

Точная эквивалентная команда в PHP - это функция number_format:

number_format($a, 3, '.', ""); // 2.423
  • округляет число до третьего знака после запятой
  • при необходимости он заполняется символами "0", чтобы всегда иметь три десятичных знака

Вот практическая функция:

function toFixed($number, $decimals) {
  return number_format($number, $decimals, '.', "");
}

toFixed($a, 3); // 2.423

Ответ 3

Вы пробовали это:

round(2.4232, 2);

Это даст вам ответ 2.42.

Более подробную информацию можно найти здесь: http://php.net/manual/en/function.round.php

Ответ 4

Прямой эквивалент sprintf('%.03F', $a). Это будет отформатировать рассматриваемое значение как число с 3 десятичными цифрами. Он также будет округлен, если потребуется.

Ответ 5

Вот перевод:

function toFixed($number, $dec_length){
    $pos=strpos($number.'', ".");
    if($pos>0){
        $int_str=substr($number,0,$pos);
        $dec_str=substr($number, $pos+1);
        if(strlen($dec_str)>$dec_length){
            return $int_str.($dec_length>0?'.':'').substr($dec_str, 0,$dec_length);
        }else{
            return $number;
        }
    }else{
        return $number;
    }
}


//toFixed(1234.678, 0) = 1234
//toFixed(1234.678, 1) = 1234.6
//toFixed(1234.678, 2) = 1234.67
//toFixed(1234.678, 4) = 1234.678

Ответ 6

В PHP вы можете использовать функцию round.

Ответ 7

Прямое решение заключается в использовании в php number_format()

number_format(2.4232, 3);