php - 형변환 - strtof




과학적 표기법으로 된 숫자를 포함하는 문자열을 PHP에서 double로 변환 (5)

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을 더하면 (0을 뺄 수도 있습니다) 문자열이 숫자가되고, 소수 자리가 적당합니다.

결과:

  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";

과학적 표기법으로 된 숫자를 포함하는 문자열을 이중으로 변환하는 데 도움이 필요합니다.

예제 문자열 : "1.8281e-009" "2.3562e-007" "0.911348"

나는 숫자를 왼쪽 숫자와 지수로 나누는 것에 대해서 생각해 보았습니다. 그냥 숫자를 생성하는 수학을하기보다는, 그러나 이것을하는 더 나은 / 표준 방법이 있습니까?


float 과학 표기법 번호에서 비 과학 표기법 번호로 값을 변환하기 위해 number_format을 사용하는 게시물을 발견했습니다.

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

편집자 주 : 링크가 썩어있다.

게시물의 예 :

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

HTH


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, '.');
}

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로 작업


$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,'.');
}






scientific-notation