PHP строка с плавающей точкой
Я вообще не знаком с PHP и имел быстрый вопрос.
У меня есть 2 переменные @pricePerUnit и @invoicedUnits. Вот код, который устанавливает эти значения:
$InvoicedUnits = ((string) $InvoiceLineItem->InvoicedUnits);
$pricePerUnit = ((string) $InvoiceLineItem->PricePerUnit);
если я выведу это, я получу правильные значения. Допустим, 5000 выставленных счетов единиц и 1.00 по цене.
теперь, мне нужно показать общую сумму расходов. Когда я умножаю эти два вместе, это не работает (как и ожидалось, это строки).
но я понятия не имею, как для разбора/приведения/преобразования переменных в PHP.
Что делать?
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 (особенно, но не ограничиваясь переводческой индустрией, исследованиями и ИТ)