[php] 플로팅 할 PHP 문자열

저는 PHP에 전혀 익숙하지 않고 빠른 질문이있었습니다.

2 개의 변수 pricePerUnitInvoicedUnits. 다음은이를 값으로 설정하는 코드입니다.

$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);

이것을 출력하면 올바른 값을 얻습니다. 말할 수 있습니다 5000청구 단위 및 1.00가격.

이제 총 지출 금액을 표시해야합니다. 이 두 가지를 곱하면 작동하지 않습니다 (예상대로 문자열입니다).

그러나 PHP에서 변수를 구문 분석 / 캐스트 / 변환하는 방법에 대한 단서가 없습니다.

어떻게해야합니까?



답변

$rootbeer = (float) $InvoicedUnits;

당신을 위해해야합니다. Type-Juggling을 확인하십시오 . 또한 문자열을 Numbers로 변환 해야합니다 .


답변

당신은 원하는 비 로케일 인식 floatval기능 :

float floatval (mixed $ var)-문자열의 float 값을 가져옵니다.

예:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343


답변

글쎄, 사용자가 1,00,000을 쓰면 floatvar에 오류가 표시됩니다. 그래서-

floatval(preg_replace("/[^-0-9\.]/","",$input));

이것은 훨씬 더 신뢰할 수 있습니다.

사용법 :

$input = '1,03,24,23,434,500.6798633 this';
echo floatval(preg_replace("/[^-0-9\.]/","",$input));


답변

float에서 마크 업을 처리하는 것은 간단한 작업이 아닙니다. 영어 / 미국식 표기법에서는 1000 플러스 형식을 지정합니다 46*10-2.

1,000.46

그러나 독일에서는 쉼표와 점을 변경합니다.

1.000,46

이로 인해 다국어 응용 프로그램에서 올바른 숫자를 추측하기가 정말 어렵습니다. 이 작업을 위해 Zend 프레임 워크를
사용하는 것이 좋습니다 Zend_Measure. 이 구성 요소는 사용자 언어에 따라 문자열을 부동 소수점으로 구문 분석합니다.


답변

이 함수를 사용하여 모든 종류의 텍스트 스타일에서 부동 소수점 값을 캐스팅합니다.

function parseFloat($value) {
    return floatval(preg_replace('#^([-]*[0-9\.,\' ]+?)((\.|,){1}([0-9-]{1,3}))*$#e', "str_replace(array('.', ',', \"'\", ' '), '', '\\1') . '.\\4'", $value));
}

이 솔루션은 로케일 설정에 종속되지 않습니다. 따라서 사용자 입력을 위해 사용자는 원하는 방식으로 부동 값을 입력 할 수 있습니다. 이것은 정말 도움이됩니다. 예를 들어 영어로만되어있는 프로젝트가 있지만 전 세계 사람들이 그것을 사용하고 있고 프로젝트가 float 값에 대해 쉼표 대신 점을 원한다는 것을 염두에 두지 않을 수 있습니다. 혼합에 자바 스크립트를 던져 브라우저 기본 설정을 가져올 수 있지만 여전히 많은 사람들이 이러한 값을 영어로 설정했지만 여전히 1.25 대신 1,25를 입력합니다 (특히 번역 산업, 연구 및 IT에만 국한되지 않음).


답변

이 작업을 수행하는 표준 방법에 문제가 있습니다.

$string = "one";

$float = (float)$string;

echo $float; : ( Prints 0 )

유효한 숫자가 없으면 파서는 숫자를 반환하지 않아야하며 오류가 발생해야합니다. (이것은 내 코드 YMMV에서 잡으려는 조건입니다)

이 문제를 해결하기 위해 다음을 수행했습니다.

$string = "one";

$float = is_numeric($string) ? (float)$string : null;

echo $float; : ( Prints nothing )

그런 다음 변환을 추가로 처리하기 전에 유효한 문자열 구문 분석이없는 경우 오류를 확인하고 반환 할 수 있습니다.


답변

별도로 변환 할 수없는 값을 처리해야하는 경우 다음 방법을 사용할 수 있습니다.

try {
    $valueToUse = trim($stringThatMightBeNumeric) + 0;
} catch (\Throwable $th) {
    // bail here if you need to
}