我想把这些值'3'
,'2.34'
,'0.234343'
等转换成数字。在JavaScript中我们可以使用Number()
,但PHP中是否有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
我想把这些值'3'
,'2.34'
,'0.234343'
等转换成数字。在JavaScript中我们可以使用Number()
,但PHP中是否有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
在大多数情况下,你通常不需要这样做,因为PHP会在大多数情况下自动转换类型。但是在你需要显式地转换类型的情况下,可以使用强制转换:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
有几种方法可以实现:
将字符串转换为数值原始数据类型:
$num = (int) "10";
$num = (double) "10.12"; // same as (float) "10.12";
在字符串上执行数学运算:
$num = "10" + 1;
$num = floor("10.1");
使用intval()
或 floatval()
函数:
$num = intval("10");
$num = floatval("10.1");
使用settype()
函数。
(double)
只是 (float)
的别名。 - deceze$num = "10" + 1
的示例)。 - fardjadintval("9999999999")==2147483647
。 - rivintval
很有用,因为你可以在 array_map('intval', $arrayOfStrings);
中使用它,而使用强制转换是做不到的。 - icc97$num = "10" + 1;
,使用 $num = "10" * 1;
更好,因为这不会改变值(乘法的中性元素),本质上类似于 toNumber(..)
。最终类型将由需要将字符串转换为整数或浮点数来确定,例如:"10" -> (int) 10;"10.1" -> (float) 10.1。 - Hollyintval($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
?>
12.7896
? - Agnes Palit(int)$my_str
不会起作用,因为我正在处理像 01
和 013
这样的字符串,我希望将它们解释为十进制...所以我想要一种明确提供基数的方法。 - Giacomo Alzetta无论是什么(弱类型)语言,您都可以通过在字符串后添加零将其转换为数字。
然而,这样做很少有意义,因为PHP会在使用该变量时自动进行转换,并且在输出时它将被转换为字符串。
请注意,您可能希望将带小数点的数字保留为字符串,因为在转换为浮点数后,由于浮点数的性质,可能会发生不可预测的变化。
typeof('123'+0)
会返回'string'
,因为'123'+0
的结果是 '1230'
。 - Oriol0+'123'
才能得到 123
。 - Timo Huovinen不必选择将 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;
是的,PHP 中有一个类似的方法,但它很少被人知道,你很少会听说。它是一个被称为“identity”的算术运算符,可以在这里找到相关说明:
要将一个数字字符串转换成数字,请按照以下步骤操作:
$a = +$a;
is_numeric
函数,以便有一个地方可以放置处理无法正确转换的字符串的代码。) - ToolmakerSteve$value = '0.4'
的情况下得到一个浮点数,但在 $value = '4'
的情况下得到整数,您可以编写以下代码:$number = ($value == (int) $value) ? (int) $value : (float) $value;
它有点脏,但它能用。
strpos($val, '.') === false ? intval($val) : floatval($val);
- jchook2.1e2
这样的情况时出现了问题。虽然这个数字有小数点,但最终结果应该是整数。” - Tomáš Blatný210.0
是一个浮点数,在PHP中,2.1e2
也是一个浮点数。尝试一下吧。浮点数与在RAM中存储数字以及表示为数字文字的方式有关。 - jchook+
身份运算符:var_dump(+'0.4',+'4')
,将给出一个浮点数和一个整数。https://www.php.net/manual/en/language.operators.arithmetic.php - tvanc你可以使用:
(int)(your value);
或者你可以使用:
intval(string)
is_float
检查数字是否为浮点数,如果通过检查,则使用 (float)
进行强制转换,而不是使用 (int)
。 - Martin van Driel在 PHP 中,你可以使用 intval(string) 或者 floatval(string)
函数将字符串转换为数字。
您总是可以将零加入其中!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
A non well formed numeric value encountered
。你有什么想法吗? - Agnes Palit
int
或float
(当给定int
时,通常不需要float
)。 - Matthieu Napoli2
被内部存储为Number:"JavaScript代码中的数字字面量(如37)是浮点值,而不是整数。在日常使用中没有单独的整数类型。(JavaScript现在有一个BigInt类型,但它并不是为了取代Number而设计的。37仍然是一个Number,而不是BigInt。)"因此,在JS中,Number(your_string)
之所以能够实现你想要的功能,是因为其他地方的逻辑默认将2
显示为"2"
而不是"2.0"
。 - ToolmakerSteve