programing

부동할 PHP 문자열

goodjava 2023. 1. 14. 09:30

부동할 PHP 문자열

저는 PHP에 대해 전혀 모르기 때문에 질문이 하나 있습니다.

입니다.pricePerUnit ★★★★★★★★★★★★★★★★★」InvoicedUnits 코드는 과 같습니다이러한 값을 설정하는 코드는 다음과 같습니다.

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

이것을 출력하면, 올바른 값이 표시됩니다.를 들면, 「 」입니다.5000 및 " " " "1.00가격을 위해.

이제 총 지출액을 보여줘야 합니다.이 둘을 곱하면 동작하지 않습니다(역시 이것은 문자열입니다).

그러나 PHP에서 변수를 해석/캐스팅/변환하는 방법은 전혀 모릅니다.

어떻게 해야 하나?

$rootbeer = (float) $InvoicedUnits;

널 위해 해야 할 거야.Type-Juggling을 확인합니다.String conversion to Numbers도 읽어보십시오.

비로케일 인식 기능이 필요합니다.

floatval ( mixed $var ) : 문자열의 플로트 값을 가져옵니다.

예:

$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));

플로트의 마크업을 처리하는 것은 사소한 일이 아닙니다.에서는 1,000 1,000 더하기/는 1,000+는 1,000으로 합니다.46*10-2:

1,000.46

그러나 독일에서는 쉼표와 점을 바꿉니다.

1.000,46


이 때문에 다국어 어플리케이션에서는 정확한 숫자를 추측하기가 매우 어렵습니다.
는 '쓰다'를 을 강력히 추천합니다.Zend_MeasureZend Framework z z z 。이 컴포넌트는 문자열을 사용자 언어로 플로트로 해석합니다.

링크를 클릭하면 문자열/숫자를 PHP에서 숫자/플로트/10진수로 변환하는 방법에 대해 자세히 알 수 있습니다.이 링크의 내용은 다음과 같습니다.

방법 1: number_format() 함수를 사용합니다.number_format() 함수는 문자열을 숫자로 변환하기 위해 사용됩니다.성공 시 포맷된 번호를 반환합니다.그렇지 않으면 실패 시 E_WARNING이 표시됩니다.

$num = "1000.314"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num), "\n"; 

//Convert string in number using  
//number_format(), function 
echo number_format($num, 2); 

방법 2: 유형 주조 사용:타이프캐스팅은 문자열을 플로트, 더블 또는 정수 프리미티브 유형으로 직접 변환할 수 있습니다.이것은 문자열을 함수 없이 숫자로 변환하는 가장 좋은 방법입니다.

// Number in string format 
$num = "1000.314"; 

// Type cast using int 
echo (int)$num, "\n"; 

// Type cast using float 
echo (float)$num, "\n"; 

// Type cast using double 
echo (double)$num; 

방법 3: intval() 및 floatval() 함수를 사용합니다.intval() 및 floatval() 함수를 사용하여 문자열을 각각 대응하는 정수와 float 값으로 변환할 수도 있습니다.

// Number in string format 
$num = "1000.314"; 

// intval() function to convert  
// string into integer 
echo intval($num), "\n"; 

// floatval() function to convert 
// string to float 
echo floatval($num); 

방법 4: 0을 더하거나 수학 연산을 실행한다.문자열 번호는 정수로 변환하거나 문자열에 0을 추가하여 플로트할 수도 있습니다.PHP에서는 수학적 연산을 수행할 때 문자열이 정수로 변환되거나 암시적으로 부동합니다.

// Number into string format 
$num = "1000.314"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.0, "\n"; 

// Performing mathematical operation  
// to implicitly type conversion 
echo $num + 0.1;

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

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

이 솔루션은 로케일 설정에 의존하지 않습니다.따라서 사용자 입력의 경우 사용자가 원하는 방식으로 부동값을 입력할 수 있습니다.이것은 매우 도움이 됩니다.예를 들어, 프로젝트가 영어로만 되어 있지만, 전 세계인이 사용하고 있기 때문에, 프로젝트가 부동치에 쉼표 대신 점을 필요로 하는 것을 염두에 두지 않는 경우가 있습니다.javascript를 혼합하여 브라우저의 기본 설정을 가져올 수 있지만, 여전히 많은 사람들이 이러한 값을 영어로 설정하지만 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 )

변환 처리를 계속하기 전에 문자열의 올바른 구문 분석이 없는 경우 오류를 확인하고 반환할 수 있습니다.

이 질문은 고대이지만, 이 질문에 대한 필터_ 다양한 기능 집합을 언급하거나 사용하지 않는 기능 집합에서 사용할 수 있으며, 이를 검증 또는 소독할 수 있으며, 이를 검증하거나 소독할 수 있다.테드/is)텐트 필드):

$InvoicedUnits = (float) filter_var($InvoiceLineItem->InvoicedUnits,
  FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$pricePerUnit  = (float) filter_var($InvoiceLineItem->PricePerUnit,
  FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));

printf("The total is: %.2f\n", $InvoicedUnits * $pricePerUnit); // both are now floats and the result is a float, formatted to two digits after the decimal sign.

이것은 출력을 삭제합니다(이것은 여전히 문자열로 남습니다). 그리고 현재 로케일의 소수 구분자 설정(예를 들어 도트 vs. 쉼표)을 받아들입니다.또한 검증을 위한 PHP 매뉴얼에는 더 많은 옵션이 있습니다(결과 자동 변환됩니다).float(유효한 경우)그 결과는 시나리오에 따라 약간 다릅니다.예를 들어, 사전에 알고 있는 경우는,$InvoiceLineItem에는 부동소수점 숫자에 대한 유효한 숫자와 기호만 있습니다.또는 먼저 필드를 '정리'해야 하는 경우 공백, 표류 문자(통화 기호 등)를 삭제합니다.

마지막으로, 합계가 통화로 표시되므로 출력 형식을 적절하게 지정하려면 기본 제공 클래스를 살펴보고 다음과 같은 작업을 수행해야 합니다.

$InvoicedUnits = (float) filter_var($InvoiceLineItem->InvoicedUnits,
  FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
$pricePerUnit  = (float) filter_var($InvoiceLineItem->PricePerUnit,
  FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));

$fmt = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
echo 'Total is: ' . $fmt->formatCurrency($InvoicedUnits * $pricePerUnit, 'EUR') . PHP_EOL;

또한 설정된 로케일 및 기타 유사한 고급 항목에 따라 수천 개의 구분 기호(스페이스, 점, 쉼표...)를 처리합니다.

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, ''일 문자열 임의로 됨) 및 ('빈 문자열')에 ('빈 문자열$fmt->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL)디폴트 3글자 통화 코드를 취득합니다(통상, 가격은 특정 통화로 지정되어 있기 때문에, 이러한 기능은 통화 환율을 고려하지 않습니다!).

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

try {
    // use + 0 if you are accounting in cents 
    $doubleValue = trim($stringThatMightBeNumeric) + 0.0;
} catch (\Throwable $th) {
    // bail here if you need to
}

언급URL : https://stackoverflow.com/questions/481466/php-string-to-float