PHP строка с плавающей точкой


Я вообще не знаком с PHP и имел быстрый вопрос.

У меня есть 2 переменные @pricePerUnit и @invoicedUnits. Вот код, который устанавливает эти значения:

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

если я выведу это, я получу правильные значения. Допустим, 5000 выставленных счетов единиц и 1.00 по цене.

теперь, мне нужно показать общую сумму расходов. Когда я умножаю эти два вместе, это не работает (как и ожидалось, это строки).

но я понятия не имею, как для разбора/приведения/преобразования переменных в PHP.

Что делать?

5 83

5 ответов:

$rootbeer = (float) $InvoicedUnits;

должен сделать это за вас. Проверьте Тип-Жонглирование. Вы также должны прочитать преобразование строк в числа.

вы хотите не локали 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));

работа с разметкой в поплавках является нетривиальной задачей. В англо-американской нотации вы форматируете тысячу плюс 46*10-2:

1,000.46

но в Германии вы бы изменили запятую и точку:

1.000,46


Это делает его действительно трудно угадать правильный номер в многоязычных приложениях.
Я настоятельно рекомендую использовать Zend_Measure из Zend Framework для этой задачи. Этот компонент будет анализировать строку с плавающей точкой на языке пользователей.

используйте эту функцию для приведения значения float из любого типа стиля текста:

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 (особенно, но не ограничиваясь переводческой индустрией, исследованиями и ИТ)