Это может показаться элементарным вопросом, и я уверен, что на него уже есть ответ. Но, поскольку я не могу найти ответ, надеюсь, кто-то может помочь.
У меня есть переменная: $_POST['totalrevenue'], которая была передана со страницы PHP (home.php) через ajax на другую страницу PHP (ajax.php).
Значение 2900 и должно читаться как целое число, но читается как строка в ajax.php.
Делает
settype($_POST['totalrevenue'], int)
преобразует строку в целое число с новым значением 2.
Как лучше всего преобразовать эту строку в целое число, сохранив исходное значение (2900) в PHP?
"2,900" можно интерпретировать как 2900 или 2.9, в зависимости от настроек вашей локали. Я бы посоветовал вам просто не принимать символы, отличные от цифр, и [необязательно] независимо от того, каким является представление десятичной дроби в текущей локали.






Ваша проблема в том, что «2,900» - это нет число - это строка. Эта запятая разрушает всю магию.
Преобразуйте запятую в точку, и теперь (float) и floatval () или intval () обработают ее правильно:
$value = (float)str_replace(',', '.', $oldValue);
Или, если ',' является разделителем тысяч (я тоже не могу этого сказать), замените его пустой строкой. «2,900» превращается в 2900, и это все, что вам нужно:
$value = (int)str_replace(',', '', $oldValue);
(Перечитывая свой вопрос, вы попадаете во второй сценарий. Вышесказанное по-прежнему верно для строк с плавающей запятой).
Если это может уменьшить боль, я делаю эту ошибку более или менее каждый раз Я импортирую или экспортирую что-то из файла Microsoft Excel. Обычно до ошибок UTF8 и почти всегда до ошибок округления :-)
Попробуйте использовать (int) или (float) для приведения типа перед переменной.
$var = (int)str_replace(',', '.', $prevVar); /* for float */
а также
$var = (float)str_replace(',', '.', $prevVar); /* for int */