我想将这些类型的值'3'
,'2.34'
,'0.234343'
等转换为数字。在JavaScript中我们可以使用Number()
,但PHP中是否有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
答案 0 :(得分:807)
您通常不需要这样做,因为PHP会在大多数情况下强制为您提供类型。对于您希望显式转换类型的情况,cast:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
答案 1 :(得分:132)
有几种方法可以这样做:
将字符串转换为数字基元数据类型:
$num = (int) "10";
$num = (double) "10.12"; // same as (float) "10.12";
对字符串执行数学运算:
$num = "10" + 1;
$num = floor("10.1");
$num = intval("10");
$num = floatval("10.1");
使用settype()
。
答案 2 :(得分:45)
在任何(松散类型)语言中,您总是可以通过向数字添加零来将字符串强制转换为数字。
然而,由于PHP在使用此变量时会自动执行此操作,因此在输出时无论如何都将转换为字符串。
请注意,您可能希望将点分号保留为字符串,因为在转换为浮动之后,由于浮点数的性质,它可能会无法预测地更改。
答案 3 :(得分:39)
为避免出现问题,请尝试intval($var)
。一些例子:
<?php
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34 (octal as starts with zero)
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26 (hex as starts with 0x)
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
?>
答案 4 :(得分:22)
您可以使用:
(int)(your value);
或者您可以使用:
intval(string)
答案 5 :(得分:17)
如果你想为$value = '0.4'
获取一个浮点数,但为$value = '4'
得到一个int,你可以写:
$number = ($value == (int) $value) ? (int) $value : (float) $value;
它有点脏,但它有效。
答案 6 :(得分:14)
答案 7 :(得分:12)
在PHP中,您可以使用intval(string) or floatval(string)
函数将字符串转换为数字。
答案 8 :(得分:12)
您可以随时添加零!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
答案 9 :(得分:12)
您无需选择是否将string
转换为int
或float
,而只需向其添加0
,PHP就会自动转换结果到数字类型。
// Being sure the string is actually a number
if (is_numeric($string))
$number = $string + 0;
else // Let the number be 0 if the string is not a number
$number = 0;
答案 10 :(得分:10)
在某些情况下,只需注意一些有用且更安全的答案。
您可能想要先检查字符串是否实际包含有效数值,然后再将其转换为数字类型(例如,如果必须操作来自将int转换为字符串的数据库的数据)。您可以使用is_numeric()
,然后使用floatval()
:
$a = "whatever"; // any variable
if (is_numeric($a))
var_dump(floatval($a)); // type is float
else
var_dump($a); // any type
答案 11 :(得分:8)
这是实现您所需要的功能。首先,我们检查值是否可以理解为数字,如果是,我们将其转换为int和float。如果int和float是相同的(例如,5 == 5.0),那么我们返回int值。如果int和float不相同(例如,5!= 5.3),那么我们假设您需要float的精度并返回该值。如果值不是数字,则抛出警告并返回null。
function toNumber($val) {
if (is_numeric($val)) {
$int = (int)$val;
$float = (float)$val;
$val = ($int == $float) ? $int : $float;
return $val;
} else {
trigger_error("Cannot cast $val to a number", E_USER_WARNING);
return null;
}
}
答案 12 :(得分:6)
如果您想获取字符串的数值,并且由于不确定而不想将其转换为float / int,此技巧将把它转换为正确的类型:
function get_numeric($val) {
if (is_numeric($val)) {
return $val + 0;
}
return 0;
}
Example:
<?php
get_numeric('3'); // int(3)
get_numeric('1.2'); // float(1.2)
get_numeric('3.0'); // float(3)
?>
来源:https://www.php.net/manual/en/function.is-numeric.php#107326
答案 13 :(得分:6)
除Boykodev's answer之外,我建议:
Input Output
'2' * 1 2 (int)
'2.34' * 1 2.34 (float)
'0.3454545' * 1 0.3454545 (float)
答案 14 :(得分:6)
$num = "3.14";
$int = (int)$num; // Output = 3
$float = (float)$num; // Output = 3.14
$double = (double)$num; // Output = 3.14
您可以使用强制转换将字符串转换为PHP中的数字。
答案 15 :(得分:6)
我发现在JavaScript中将字符串转换为数字的简单方法是将其乘以1.它解决了连接问题,因为“+”符号在JavaScript中有多种用法,而“*”符号纯粹是为了数学乘法。
根据我在这里看到的有关PHP自动愿意将包含数字的字符串解释为数字(以及关于添加的注释,因为在PHP中“+”纯粹用于数学加法),这个乘法技巧对PHP也很好。
我测试了它,它确实有效......虽然取决于你如何获取字符串,你可能想要在它乘以1之前对它应用trim()函数。
答案 16 :(得分:6)
这是我为自己简化的一个函数:
它还返回boolean,integer,double和real的简写版本。
function type($mixed, $parseNumeric = false)
{
if ($parseNumeric && is_numeric($mixed)) {
//Set type to relevant numeric format
$mixed += 0;
}
$t = gettype($mixed);
switch($t) {
case 'boolean': return 'bool'; //shorthand
case 'integer': return 'int'; //shorthand
case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
default: return $t;
}
}
将parseNumeric设置为true的调用类型将在检查类型之前转换数字字符串。
因此:
type(“5”,true)将返回int
type(“3.7”,true)将返回float
type(“500”)将返回字符串
请注意,因为这是一种错误的检查方法,您的实际变量仍然是一个字符串。如果需要,您需要将实际变量转换为正确的类型。我只是需要它来检查数据库是否应该加载项ID或别名,因此没有任何意外的影响,因为它无论如何都会在运行时被解析为字符串。
修改强>
如果您想检测对象是否为函数,请将此案例添加到交换机:
case 'object': return is_callable($mixed)?'function':'object';
答案 17 :(得分:5)
您可以简单地这样写:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
答案 18 :(得分:5)
是的,PHP中有类似的方法,但很少有人知道你很少会听到它。它是一个名为“ identity ”的算术运算符,如下所述:
要将数字字符串转换为数字,请执行以下操作:
$a = +$a;
答案 19 :(得分:5)
您只需使用intval()
函数将字符串转换为int。
答案 20 :(得分:4)
尝试使用以下内容:
<?php
$string = '5'; // The $ string is a variable to hold string '5'
$int = intval($string); // $int is the converted string to integer $int = intval('5');
echo $int; // 5
?>
答案 21 :(得分:4)
您可以使用:
((int) $var) ( but in big number it return 2147483647 :-) )
但最好的解决方案是使用:
if (is_numeric($var))
$var = (isset($var)) ? $var : 0;
else
$var = 0;
或者
if (is_numeric($var))
$var = (trim($var) == '') ? 0 : $var;
else
$var = 0;
答案 22 :(得分:4)
$a = "10";
$b = (int)$a;
您可以使用它将字符串转换为PHP中的int。
答案 23 :(得分:3)
仅将数字乘以1即可将字符串转换为数字类型。
//String value
$string = "5.1"
if(is_numeric($string)){
$numeric_string = $string*1;
}
答案 24 :(得分:2)
PHP将在限制范围内为您完成
<?php
$str = "3.148";
$num = $str;
printf("%f\n", $num);
?>
答案 25 :(得分:2)
晚了聚会,但这是另一种方法:
function cast_to_number($input) {
if(is_float($input) || is_int($input)) {
return $input;
}
if(!is_string($input)) {
return false;
}
if(preg_match('/^-?\d+$/', $input)) {
return intval($input);
}
if(preg_match('/^-?\d+\.\d+$/', $input)) {
return floatval($input);
}
return false;
}
cast_to_number('123.45'); // (float) 123.45
cast_to_number('-123.45'); // (float) -123.45
cast_to_number('123'); // (int) 123
cast_to_number('-123'); // (int) -123
cast_to_number('foo 123 bar'); // false
答案 26 :(得分:2)
您可以按如下方式更改数据类型
$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float
由于历史原因,在浮动的情况下会返回“double”。
答案 27 :(得分:2)
所有建议都会丢失数字类型。
在我看来,这是一种最佳做法:
function str2num($s){
// Returns a num or FALSE
$return_value = !is_numeric($s) ? false : (intval($s)==floatval($s)) ? intval($s) :floatval($s);
print "\nret=$return_value type=".gettype($return_value)."\n";
}
答案 28 :(得分:2)
对于您的具体情况,您可以乘以1将字符串转换为PHP中的数字。 PHP自动处理浮动和整数。
$num = "2.12";
var_dump(is_float($num)); // bool(false)
var_dump(is_int($num)); // bool(false)
var_dump(is_string($num)); // bool(true)
$num = $num*1;
var_dump(is_float($num)); // bool(true)
var_dump(is_int($num)); // bool(false)
var_dump(is_string($num)); // bool(false)
答案 29 :(得分:1)
如果您事先不知道自己是浮点数还是整数,
并且该字符串可能包含特殊字符(例如空格,€等),
如果它可能包含多个点或逗号,
您可以使用以下功能:
// This function strip spaces and other characters from a string and return a number.
// It works for integer and float.
// It expect decimal delimiter to be either a '.' or ','
// Note: everything after an eventual 2nd decimal delimiter will be removed.
function stringToNumber($string) {
// return 0 if the string contains no number at all or is not a string:
if (!is_string($string) || !preg_match('/\d/', $string)) {
return 0;
}
// Replace all ',' with '.':
$workingString = str_replace(',', '.', $string);
// Keep only number and '.':
$workingString = preg_replace("/[^0-9.]+/", "", $workingString);
// Split the integer part and the decimal part,
// (and eventually a third part if there are more
// than 1 decimal delimiter in the string):
$explodedString = explode('.', $workingString, 3);
if ($explodedString[0] === '') {
// No number was present before the first decimal delimiter,
// so we assume it was meant to be a 0:
$explodedString[0] = '0';
}
if (sizeof($explodedString) === 1) {
// No decimal delimiter was present in the string,
// create a string representing an integer:
$workingString = $explodedString[0];
} else {
// A decimal delimiter was present,
// create a string representing a float:
$workingString = $explodedString[0] . '.' . $explodedString[1];
}
// Create a number from this now non-ambiguous string:
$number = $workingString * 1;
return $number;
}
答案 30 :(得分:1)
//Get Only number from string
$string = "123 Hello Zahid";
$res = preg_replace("/[^0-9]/", "", $string);
echo $res."<br>";
//Result 123
答案 31 :(得分:0)
我得到了问题&#34;假设您正在编写用于在PHP中将字符串转换为字符串的内置函数,您将如何编写该函数&#34;在编程面试中。这是一个解决方案。
$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939;
$string = "";
while ($int) {
$string .= $nums[$int % 10];
$int = (int)($int / 10);
}
$result = strrev($string);
答案 32 :(得分:0)
有一种方法:
private void setPrice(Bike bike, HttpServletRequest request, ArrayList<String> errors){
String priceS = request.getParameter("price");
double price = Double.parseDouble(priceS);
try{
bike.setPrice(price);
} catch (DomainException e){
errors.add(e.getMessage());
}
}
由于max_val = 800
def split_x (x):
lst=[]
while x > max_val:
x=x-max_val
lst.append(max_val)
if x != 0:
lst.append(x)
return lst
data = {'id':['A', 'B'],
'value':[2000,600]}
df = pd.DataFrame(data)
df_new=pd.DataFrame({'id':[],'value':[]})
for i in range(len(df)):
d=df.loc[i]['value']
id=df.loc[i]['id']
s=split_x(d)
for i in range(len(s)):
print (i,s[i])
df_new=df_new.append({'id':id,'value':s[i]},ignore_index=True)
>>> df_new
id value
0 A 800.0
1 A 800.0
2 A 400.0
3 B 600.0
是$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);
,因此无法使用is_*
。
使用variable
和string
的组合将其转换为“真”形式。如果它是真实的json_encode()
,那么它将输出错误。
json_decode()
将会输出:string
答案 33 :(得分:0)
我一直在阅读答案,没有看到有人提到PHP数字转换中最大的警告。
最受好评的答案建议您执行以下操作:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
太好了。 PHP可以直接转换。但是,如果我们执行以下操作怎么办?
$str = "3.14is_trash"
$intstr = (int)$str
PHP认为这样的转换有效吗?
显然是。
PHP读取字符串,直到找到所需类型的第一个非数字字符为止。这意味着对于整数,数字字符为[0-9]。结果,它读取3
,因为它处于[0-9]字符范围内,所以它将继续读取。读取.
并停止在此处,因为它不在[0-9]范围内。
如果您将其强制浮动或翻倍,也会发生同样的情况。 PHP将先读取3
,然后依次读取.
,然后依次1
和4
,然后停止在i
,因为它不是有效的浮点数字字符。
结果,"million" >= 1000000
的计算结果为false,但是"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字符串如何转换为相应的数字
答案 34 :(得分:0)
可以实现的众多方法之一是:
$fileDownloadCount = (int) column_data_from_db;
$fileDownloadCount++;
第二行将值增加1。
答案 35 :(得分:-2)
$a = "7.2345";
$b = round(((float)$a),0);
答案 36 :(得分:-6)
不同的方法:
json_encode($your_array, JSON_NUMERIC_CHECK);
可选择将其解码回来