![](/img/trans.png)
[英]How do I convert a string that looks like a hex number to an actual hex number in php?
[英]How do I convert a string to a number in PHP?
我想将这些类型的值'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()
。
为避免出现问题,请尝试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
?>
在任何(松散类型的)语言中,您始终可以通过向其添加零来将字符串转换为数字。
但是,这样做没有什么意义,因为 PHP 会在使用此变量时自动执行此操作,并且无论如何都会在 output 时将其转换为字符串。
请注意,您可能希望将带点的数字保留为字符串,因为在转换为浮点数之后,由于浮点数的性质,它可能会发生不可预测的更改。
不必选择是将string
转换为int
还是float
,只需向其添加一个0
会自动将结果转换为数字类型。
// 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;
如果你想为$value = '0.4'
得到一个浮点数,但是为$value = '4'
得到一个整数,你可以这样写:
$number = ($value == (int) $value) ? (int) $value : (float) $value;
它有点脏,但是可以用。
您可以使用:
(int)(your value);
或者您可以使用:
intval(string)
你可以随时给它加零!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
在PHP 中,您可以使用intval(string) or floatval(string)
函数将字符串转换为数字。
在某些情况下,只需对可能有用且更安全的答案做一点说明。 您可能需要首先检查字符串是否实际包含有效数值,然后才将其转换为数字类型(例如,如果您必须操作来自将整数转换为字符串的数据库的数据)。 您可以使用is_numeric()
然后使用floatval()
:
$a = "whatever"; // any variable
if (is_numeric($a))
var_dump(floatval($a)); // type is float
else
var_dump($a); // any type
这是实现您正在寻找的 function。 首先我们检查这个值是否可以被理解为一个数字,如果可以,我们把它变成一个 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;
}
}
如果你想要一个字符串的数值,并且因为不确定而不想将它转换为 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
除了Boykodev 的回答,我还建议:
Input Output
'2' * 1 2 (int)
'2.34' * 1 2.34 (float)
'0.3454545' * 1 0.3454545 (float)
我一直在阅读答案,但没有看到有人提到 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] 范围内。
如果你转换为 float 或 double,也会发生同样的情况。 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如何将字符串转换为相应的数字
仅将数字乘以 1,以便将字符串转换为类型数字。
//String value
$string = "5.1"
if(is_numeric($string)){
$numeric_string = $string*1;
}
好吧,所以我刚遇到这个问题。 我的问题是有问题的数字/字符串有不同的位数。 有些没有小数点,有些则有几个。 所以对我来说,使用int
、 float
、 double
、 intval
或floatval
都会根据数字给我不同的结果。
所以,简单的解决方案......将字符串除以 1 服务器端。 这迫使它成为一个数字并保留所有数字,同时修剪不必要的 0。 它不漂亮,但它有效。
"your number string" / 1
Input Output
"17" 17
"84.874" 84.874
".00234" .00234
".123000" .123
"032" 32
这是我为自己简化事情而写的 function:
它还返回 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';
我发现在 JavaScript 中,将字符串转换为数字的一种简单方法是将其乘以 1。它解决了连接问题,因为“+”符号在 JavaScript 中有多种用途,而“*”符号纯粹是用于数学乘法。
基于我在这里看到的关于 PHP 自动愿意将包含数字的字符串解释为数字的内容(以及关于添加的评论,因为在 PHP 中“+”纯粹是为了数学加法),这个乘法技巧工作得很好对于 PHP,也。
我已经对其进行了测试,它确实有效......尽管取决于您获取字符串的方式,您可能希望在乘以 1 之前对其应用 trim() function。
迟到了,但这是另一种方法:
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
$a = "10";
$b = (int)$a;
您可以使用它在PHP 中将字符串转换为 int。
function convert_to_number($number) {
return is_numeric($number) ? ($number + 0) : FALSE;
}
您可以使用:
((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;
你可以这样写:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
有一种方法:
$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);
使用is_*
将不起作用,因为variable
是 a: string
。
使用json_encode()
和json_decode()
的组合,它被转换成它的“真实”形式。 如果它是一个真正的string
,那么它会 output 错误。
$num = "Me";
$int = (int)$num;
$float = (float)$num;
var_dump($num, $int, $float);
将 output: string(2) "Me" int(0) float(0)
现在我们处于一个严格/强类型在 PHP 中具有更大重要性的时代,我使用json_decode
:
$num = json_decode('123');
var_dump($num); // outputs int(123)
$num = json_decode('123.45');
var_dump($num); // outputs float(123.45)
您可以按如下方式更改数据类型
$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float
由于历史原因,在浮动的情况下返回“double”。
如果你事先不知道你有一个浮点数还是一个 integer,
如果字符串可能包含特殊字符(如空格、€ 等),
如果它可能包含超过 1 个点或逗号,
你可以使用这个 function:
// 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;
}
所有建议都失去了数字类型。
在我看来,这是一个最佳实践:
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";
}
//Get Only number from string
$string = "123 Hello Zahid";
$res = preg_replace("/[^0-9]/", "", $string);
echo $res."<br>";
//Result 123
它可以实现的众多方法之一是:
$fileDownloadCount = (int) column_data_from_db;
$fileDownloadCount++;
第二行将值递增 1。
使用一元运算符 (+)。 例如:
$n1 = +'7';
$n2 = '2.34';
$n2 = +$n1;
var_dump($n1): int(7) var_dump($n2): float(2.34)
您可以只将 0 添加到您的字符串中,然后将其转换为数字而不会丢失初始原始值。 尝试例如:
dd('0.3454545' + 0)
PHP 将为您处理转换,或者按照已经建议的那样在您的字符串前添加 +。
PHP会在限度内为您办好
<?php
$str = "3.148";
$num = $str;
printf("%f\n", $num);
?>
在一次编程面试中,我遇到了这样一个问题:“假设您正在编写内置 function 以将 integer 转换为 PHP 中的字符串,您将如何编写该函数”。 这是一个解决方案。
$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);
不同的方法:
json_encode($your_array, JSON_NUMERIC_CHECK);
可以选择解码回去
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.