PHP String to Float

W ogóle nie znam PHP i mam szybkie pytanie.

Mam 2 zmienne @pricePerUnit i @invoicedUnits. Oto kod, który ustawia te wartości na wartości:

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

Jeśli to wypowiem, otrzymuję poprawne wartości. Powiedzmy 5000 sztuk fakturowanych i 1,00 za cenę.

Teraz muszę pokazać całkowitą kwotę wydaną. Gdy pomnożyłem te dwa Razem, to nie działa (zgodnie z oczekiwaniami, są to ciągi).

Ale nie mam pojęcia jak parsować/cast / konwertować zmienne w PHP.

Co mam zrobić?
Author: mskfisher, 2009-01-27

5 answers

$rootbeer = (float) $InvoicedUnits;
Powinienem zrobić to za Ciebie. Zobacz Typ-żonglerka . Powinieneś również przeczytać konwersję łańcuchów na liczby .
 147
Author: Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-21 01:11:42

Chcesz non-locale-aware floatval Funkcja :

Float floatval ( mixed $var) - pobiera wartość float łańcucha znaków.

Przykład:

$string = '122.34343The';
$float  = floatval($string);
echo $float; // 122.34343
 46
Author: earino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-21 13:28:35

Cóż, jeśli użytkownik napisze 1,00,000 to floatvar pokaże błąd. So -

floatval(preg_replace("/[^-0-9\.]/","",$input));
To jest o wiele bardziej wiarygodne.

Użycie:

$input = '1,03,24,23,434,500.6798633 this';
echo floatval(preg_replace("/[^-0-9\.]/","",$input));
 17
Author: HADI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-20 01:02:27

Radzenie sobie ze znacznikami w floatach jest zadaniem nietrywialnym. W notacji Angielskiej/amerykańskiej formatujesz tysiąc plus 46 * 10-2:

1,000.46

Ale w Niemczech zmieniłbyś przecinek i punkt:

1.000,46


To sprawia, że naprawdę trudno odgadnąć odpowiednią liczbę w aplikacjach wielojęzycznych.
Zdecydowanie sugeruję użycie Zend_Measure z Zend Framework do tego zadania. Komponent ten przetworzy łańcuch znaków na zmiennoprzecinkowy przez język users.

 7
Author: Tobias P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-18 12:35:14

Użyj tej funkcji do wyświetlenia wartości float z dowolnego stylu tekstu:

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

To rozwiązanie nie zależy od ustawień regionalnych. Tak więc dla wejścia użytkownika użytkownicy mogą wpisywać wartości zmiennoprzecinkowe w dowolny sposób. Jest to bardzo pomocne np. gdy masz projekt, który jest tylko w języku Angielskim, ale ludzie na całym świecie go używają i może nie mieć na uwadze, że projekt chce kropki zamiast przecinka dla wartości float. Możesz wrzucić javascript do Miksa i pobrać przeglądarki domyślne ustawienia, ale nadal wiele osób ustawia te wartości na angielski, ale nadal wpisując 1,25 zamiast 1.25 (zwłaszcza, ale nie ograniczając się do branży tłumaczeniowej, badań i IT)

 1
Author: Hafenkranich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 11:06:49