Sar*_*ara 596 php casting type-conversion
我想转换这些类型的值,'3','2.34','0.234343',等多项.我们可以在JavaScript中使用Number(),但PHP中是否有类似的方法?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 914
您通常不需要这样做,因为PHP会在大多数情况下强制为您提供类型.对于那些你想显式转换型的情况下,投它:
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
Run Code Online (Sandbox Code Playgroud)
far*_*jad 152
有几种方法可以这样做:
将字符串转换为数字原始数据类型:
$num = (int) "10";
$num = (double) "10.12"; // same as (float) "10.12";
Run Code Online (Sandbox Code Playgroud)对字符串执行数学运算:
$num = "10" + 1;
$num = floor("10.1");
Run Code Online (Sandbox Code Playgroud)$num = intval("10");
$num = floatval("10.1");
Run Code Online (Sandbox Code Playgroud)使用settype().
You*_*nse 47
在任何(松散类型)语言中,您总是可以通过向数字添加零来将字符串强制转换为数字.
但是,由于PHP在使用此变量时会自动执行此操作,因此在输出时无论如何都将转换为字符串.
请注意,您可能希望将点分号保持为字符串,因为在转换为浮动之后,由于浮点数的性质,它可能会无法预测地更改.
小智 45
为了避免问题尝试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
?>
Run Code Online (Sandbox Code Playgroud)
Ale*_*kin 24
如果你想获得一个浮点数$value = '0.4',但是int for $value = '4',你可以写:
$number = ($value == (int) $value) ? (int) $value : (float) $value;
Run Code Online (Sandbox Code Playgroud)
它有点脏,但它的工作原理.
noo*_*php 23
您可以使用:
(int)(your value);
Run Code Online (Sandbox Code Playgroud)
或者您可以使用:
intval(string)
Run Code Online (Sandbox Code Playgroud)
web*_*eat 14
而不必选择是否转换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;
Run Code Online (Sandbox Code Playgroud)
Boy*_*dev 14
你可以随时添加零!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
Run Code Online (Sandbox Code Playgroud)
ald*_*ans 12
是的,在PHP中有一个类似的方法,但是很少有人知道你很少会听到它.它是一个名为" identity " 的算术运算符,如下所述:
要将数字字符串转换为数字,请执行以下操作:
$a = +$a;
Run Code Online (Sandbox Code Playgroud)
Dra*_*gas 11
我一直在阅读答案,但没有看到任何人提到 PHP 数字转换中最大的警告。
获得最多支持的答案建议执行以下操作:
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
Run Code Online (Sandbox Code Playgroud)
太精彩了。PHP 进行直接转换。但如果我们执行以下操作呢?
$str = "3.14is_trash"
$intstr = (int)$str
Run Code Online (Sandbox Code Playgroud)
PHP 认为这种转换有效吗?
显然是的。
PHP 读取字符串,直到找到所需类型的第一个非数字字符。这意味着对于整数,数字字符为 [0-9]。结果,它读取3,因为它在 [0-9] 字符范围内,所以它继续读取。读取.并停在那里,因为它不在 [0-9] 范围内。
如果你要转换为浮动或双倍,也会发生同样的情况。PHP 会读取3, then ., then 1, then 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字符串如何转换为相应的数字
tas*_*enb 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
Run Code Online (Sandbox Code Playgroud)
这是实现您正在寻找的功能.首先,我们检查值是否可以理解为数字,如果是,我们将其转换为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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个字符串的数值并且你不想将它转换为 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)
?>
Run Code Online (Sandbox Code Playgroud)
来源:https : //www.php.net/manual/en/function.is-numeric.php#107326
好吧,我刚刚遇到了这个问题。我的问题是所讨论的数字/字符串具有不同的位数。有些没有小数点,有些则有几个。所以对我来说,使用int、float、double、intval或floatvalall 根据数字给出了不同的结果。
所以,简单的解决方案...在服务器端将字符串除以 1。这会将其强制转换为数字并保留所有数字,同时删除不必要的 0。它不漂亮,但很有效。
"your number string" / 1
Input Output
"17" 17
"84.874" 84.874
".00234" .00234
".123000" .123
"032" 32
Run Code Online (Sandbox Code Playgroud)
这是我为自己简化的一个函数:
它还返回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;
}
}
Run Code Online (Sandbox Code Playgroud)
将parseNumeric设置为true的调用类型将在检查类型之前转换数字字符串.
从而:
type("5",true)将返回int
type("3.7",true)将返回float
type("500")将返回字符串
请注意,因为这是一种错误的检查方法,您的实际变量仍然是一个字符串.如果需要,您需要将实际变量转换为正确的类型.我只是需要它来检查数据库是否应该加载项ID或别名,因此没有任何意外的影响,因为无论如何它将在运行时被解析为字符串.
编辑
如果您想检测对象是否为函数,请将此案例添加到交换机:
case 'object': return is_callable($mixed)?'function':'object';
Run Code Online (Sandbox Code Playgroud)
我发现在JavaScript中将字符串转换为数字的简单方法是将其乘以1.它解决了连接问题,因为"+"符号在JavaScript中有多种用法,而"*"符号纯粹是用于数学乘法.
基于我在这里看到的关于PHP自动肯不肯来解释一个包含数字串数字(和有关添加注释,因为PHP中的"+"纯粹是为了数学加法),这招乘工作只是正常对于PHP,也是.
我测试了它,它确实有效......虽然取决于你如何获取字符串,你可能想要在它乘以1之前应用trim()函数.
除了Boykodev的回答,我建议:
Input Output
'2' * 1 2 (int)
'2.34' * 1 2.34 (float)
'0.3454545' * 1 0.3454545 (float)
Run Code Online (Sandbox Code Playgroud)
小智 6
仅将数字乘以 1,以便将字符串转换为数字类型。
//String value
$string = "5.1"
if(is_numeric($string)){
$numeric_string = $string*1;
}
Run Code Online (Sandbox Code Playgroud)
$a = "10";
$b = (int)$a;
Run Code Online (Sandbox Code Playgroud)
您可以使用它在PHP中将字符串转换为int 。
小智 5
你可以这样写:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
Run Code Online (Sandbox Code Playgroud)
聚会迟到了,但这里有另一种方法:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1532701 次 |
| 最近记录: |