Преобразование научной нотации в обычный плавающий PHP [duplicate]

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

См. « Исключение NullReferenceException при проверке пользовательского AuthorizationAttribute » для несколько подробного примера.

13
задан Bilal Shahid 2 January 2011 в 04:11
поделиться

7 ответов

PHP безрисковый динамически типизирован, то есть он должен анализировать значения для определения их типов (в последних версиях PHP есть объявления типа ).

В вашем случае вы можете просто выполнить численную операцию, чтобы заставить PHP рассматривать значения как числа (и понимает научную нотацию x.yE-z).

Попробуйте, например,

  foreach (array("1.8281e-009","2.3562e-007","0.911348") as $a)
  {
    echo "String $a: Number: " . ($a + 1) . "\n";
  }

просто добавить 1 (вы может также вычесть ноль) заставит строки стать числами с нужным количеством десятичных знаков.

Результат:

  String 1.8281e-009: Number: 1.0000000018281
  String 2.3562e-007: Number: 1.00000023562
  String 0.911348:    Number: 1.911348

Вы также можете записать результат с помощью (float)

  $real = (float) "3.141592e-007";
10
ответ дан Ring Ø 23 August 2018 в 19:15
поделиться

Используйте функции number_format() и rtrim() вместе. Например:

//eg $sciNotation = 2.3649E-8
$number = number_format($sciNotation, 10); //Use $dec_point large enough
echo rtrim($number, '0'); //Remove trailing zeros

Я создал функцию с большим количеством функций (каламбур не предназначен)

function decimalNotation($num){
    $parts = explode('E', $num);
    if(count($parts) != 2){
        return $num;
    }
    $exp = abs(end($parts)) + 3;
    $decimal = number_format($num, $exp);
    $decimal = rtrim($decimal, '0');
    return rtrim($decimal, '.');
}
0
ответ дан aphoe 23 August 2018 в 19:15
поделиться
function decimal_notation($float) {
        $parts = explode('E', $float);

        if(count($parts) === 2){
            $exp = abs(end($parts)) + strlen($parts[0]);
            $decimal = number_format($float, $exp);
            return rtrim($decimal, '.0');
        }
        else{
            return $float;
        }
    }

работает с 0.000077240388

0
ответ дан Falselight 23 August 2018 в 19:15
поделиться
$float = sprintf('%f', $scientific_notation);
$integer = sprintf('%d', $scientific_notation);
if ($float == $integer)
{
    // this is a whole number, so remove all decimals
    $output = $integer;
}
else
{
    // remove trailing zeroes from the decimal portion
    $output = rtrim($float,'0');
    $output = rtrim($output,'.');
}
2
ответ дан Luca Borrione 23 August 2018 в 19:15
поделиться
$f = (float) "1.8281e-009";
var_dump($f); // float(1.8281E-9)
9
ответ дан Matthew 23 August 2018 в 19:15
поделиться

Следующая строка кода может помочь вам отобразить значение bigint,

$token=  sprintf("%.0f",$appdata['access_token'] );

ссылаться на эту ссылку .

2
ответ дан ShivarajRH 23 August 2018 в 19:15
поделиться

Я нашел сообщение, которое использовало number_format для преобразования значения из числа нотных научных публикаций с плавающей точкой в ​​неназначенный номер нотации:

http://jetlogs.org/2008/02/ 05 / php-problems-with-big-integers-and-science-notation /

Примечание редактора: Ссылка гнилая

Пример из сообщения:

$big_integer = 1202400000; 
$formatted_int = number_format($big_integer, 0, '.', ''); 
echo $formatted_int; //outputs 1202400000 as expected 

HTH

3
ответ дан Terry 23 August 2018 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: