Я хочу , чтобы преобразовать эти типы значений, '3'
, '2.34'
, '0.234343'
и т.д. к числу. В JavaScript мы можем использовать Number()
, но есть ли подобный метод в PHP?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
Ответы:
Обычно вам не нужно этого делать, поскольку PHP в большинстве случаев будет приводить вас к типу. Для ситуаций, когда вы хотите явно преобразовать тип, приведите его:
источник
.
это разделитель десятичной точки. en.wikipedia.org/wiki/…Есть несколько способов сделать это:
Приведите строки в числовые примитивные типы данных:
Выполните математические операции над строками:
Используйте
intval()
илиfloatval()
:Использование
settype()
.источник
(double)
это просто псевдоним для(float)
.$num = "10" + 1
пример).intval("9999999999")==2147483647
.intval
полезно, потому что тогда вы можете использовать его, вarray_map('intval', $arrayOfStrings);
котором вы не можете делать с кастингом.$num = "10" + 1;
этого лучше использовать,$num = "10" * 1;
так как это не изменит значение (нейтральный элемент умножения), это, по сути, что-то вроде,toNumber(..)
так как конечный тип будет определяться тем, что необходимо для преобразования строки «10» -> (int) 10; «10,1» -> (плавать) 10,1;Чтобы избежать проблем, попробуйте
intval($var)
. Некоторые примеры:источник
12.7896
?(int)$my_str
это не сработает, так как я имел дело именно со строковыми ссылками,01
и013
что я хочу интерпретировать как базу 10 ... Поэтому я хотел найти способ явно предоставить базу.На любом (свободно набранном) языке вы всегда можете привести строку к числу, добавив к нему ноль.
Однако в этом нет особого смысла, поскольку PHP будет делать это автоматически во время использования этой переменной, и он будет преобразован в строку в любом случае во время вывода.
Обратите внимание, что вы можете захотеть сохранить пунктирные числа в виде строк, потому что после преобразования в число с плавающей точкой это может быть непредсказуемо изменено из-за характера чисел с плавающей точкой.
источник
typeof('123'+0)
дает'string'
, потому что'123'+0
дает'1230'
.0+'123'
чтобы получить123
Ты можешь использовать:
Или вы можете использовать:
источник
is_float
, и если это проходит, тогда приведите к с(float)
вместо(int)
.Если вы хотите получить float для
$value = '0.4'
, но int для$value = '4'
, вы можете написать:Это немного грязно, но это работает.
источник
strpos($val, '.') === false ? intval($val) : floatval($val);
localeconv()['decimal_point']
вместо'.'
. Одним из преимуществstrpos
решения является то, что оно почти в 2 раза быстрее, чем сотворение.2.1e2
, он имеет десятичную точку, но в результате получается целое число+
оператор идентичности:,var_dump(+'0.4', +'4')
дает вам с плавающей точкой и Int. php.net/manual/en/language.operators.arithmetic.phpВы всегда можете добавить ноль к этому!
источник
A non well formed numeric value encountered
. Есть идеи?Вместо того, чтобы выбрать , следует ли преобразовать
string
вint
илиfloat
, вы можете просто добавить0
к нему, и PHP будет автоматически конвертировать результат числового типа.источник
В PHP вы можете использовать
intval(string) or floatval(string)
функции для преобразования строк в числа.источник
Да, в PHP есть похожий метод, но он настолько мало известен, что о нем редко узнаешь. Это арифметический оператор называется " идентичность », как описано здесь:
Арифметические операторы
Чтобы преобразовать числовую строку в число, выполните следующие действия:
источник
is_numeric
, так что есть место для размещения кода для обработки строк , которые не может преобразовать правильно.)Небольшое примечание к ответам, которые могут быть полезными и безопасными в некоторых случаях. Возможно, вы захотите сначала проверить, содержит ли строка действительное числовое значение, а затем преобразовать его в числовой тип (например, если вам нужно манипулировать данными, поступающими из БД, которая преобразует целые числа в строки). Вы можете использовать,
is_numeric()
а затемfloatval()
:источник
Вот функция, которая достигает того, что вы ищете. Сначала мы проверяем, можно ли понимать значение как число, если это так, мы превращаем его в int и float. Если int и float одинаковы (например, 5 == 5.0), мы возвращаем значение int. Если int и float не совпадают (например, 5! = 5.3), тогда мы предполагаем, что вам нужна точность float и возвращаем это значение. Если значение не числовое, мы выдаем предупреждение и возвращаем ноль.
источник
Я обнаружил, что в JavaScript простой способ преобразовать строку в число - это умножить ее на 1. Это решает проблему конкатенации, потому что символ «+» имеет многократное использование в JavaScript, тогда как символ «*» является чисто для математического умножения.
Исходя из того, что я видел здесь относительно того, что PHP автоматически желает интерпретировать содержащую цифры строку как число (и комментарии о добавлении, поскольку в PHP "+" предназначен исключительно для математического сложения), этот трюк умножения работает просто отлично для PHP тоже.
Я проверил это, и оно работает ... Хотя в зависимости от того, как вы получили строку, вы можете применить к ней функцию trim (), прежде чем умножить на 1.
источник
Вот функция, которую я написал, чтобы упростить для себя вещи:
Он также возвращает сокращенные версии логических, целых, двойных и вещественных чисел.
Вызов типа с parseNumeric, установленным в true, преобразует числовые строки перед проверкой типа.
Таким образом:
type ("5", true) вернет int
type ("3.7", true) вернет float
type ("500") вернет строку
Просто будьте осторожны, так как это своего рода метод ложной проверки, и ваша фактическая переменная все равно будет строкой. Вам нужно будет преобразовать фактическую переменную в правильный тип, если это необходимо. Мне просто нужно было проверить, должна ли база данных загружать идентификатор элемента или псевдоним, таким образом, не получая никаких неожиданных эффектов, так как в любом случае она будет проанализирована как строка во время выполнения.
редактировать
Если вы хотите определить, являются ли объекты функциями, добавьте этот случай в коммутатор:
источник
В дополнение к ответу Бойкодева я предлагаю следующее:
источник
$id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;
вместо $ target_id_cron = (int) $ id_cron - 1;A non well formed numeric value encountered
когда я хочу изменить строку, чтобы плавать$num = '12,24' * 1
. Любое предложение?Вы можете использовать это для преобразования строки в int в PHP .
источник
Просто вы можете написать так:
источник
Умножьте число только на 1, чтобы строка была преобразована в число типа.
источник
Ты можешь использовать:
Но лучшее решение - использовать:
Или
источник
Вы можете изменить тип данных следующим образом
По историческим причинам «двойник» возвращается в случае поплавка.
PHP документация
источник
Все предложения теряют числовой тип.
Это кажется мне лучшей практикой:
источник
PHP сделает это за вас в определенных пределах
источник
Есть выход:
Использование
is_*
не будет работать, так какvariable
это:string
.Используя комбинацию
json_encode()
и затемjson_decode()
она преобразуется в «истинную» форму. Если это правда,string
то будет выводить неправильно.Будет выводить:
string(2) "Me" int(0) float(0)
источник
У меня возник вопрос «скажем, вы писали встроенную функцию для преобразования целого числа в строку в PHP, как бы вы написали эту функцию» в интервью по программированию. Вот решение.
источник
Я перечитывал ответы и не видел, чтобы кто-нибудь упоминал самое большое предостережение в преобразовании чисел в PHP.
Наиболее одобренный ответ предлагает сделать следующее:
Это блестяще. PHP делает прямое приведение. Но что, если мы сделали следующее?
Считает ли PHP такие преобразования допустимыми?
Видимо да .
PHP читает строку, пока не найдет первый нечисловой символ для требуемого типа. Это означает, что для целых чисел числовые символы равны [0-9]. В результате он читает
3
, так как он находится в диапазоне символов [0-9], он продолжает читать. Читает.
и останавливается там, поскольку он не находится в диапазоне [0-9].То же самое произошло бы, если бы вы бросили, чтобы плавать или удвоить PHP будет читать
3
, затем.
, затем1
,4
и останавливаться,i
поскольку это недопустимый числовой символ с плавающей точкой.В результате
"million" >= 1000000
оценивается как ложное, но"1000000million" >= 1000000
оценивается какtrue
.Смотрите также:
https://www.php.net/manual/en/language.operators.comparison.php, как выполняются преобразования при сравнении
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion как строки преобразуются в соответствующие числа
источник
Если вы заранее не знаете, есть ли у вас число с плавающей точкой или целое число,
и может ли строка содержать специальные символы (например, пробел, € и т. Д.),
И если она может содержать более 1 точки или запятой,
вы можете использовать это функция:
источник
Другой подход:
json_encode($your_array, JSON_NUMERIC_CHECK);
при желании расшифровать его обратноисточник