var_dump((int) 010); //Output 8
var_dump((int) "010"); //output 10
Run Code Online (Sandbox Code Playgroud)
无法理解PHP数据类型转换方法从字符串到整数.
第一个是八进制表示法,因此输出正确.但是什么时候将"010"转换为整数.它也应该输出8.
以下所有答案都是针对var_dump((int)010); ,但我想要回答var_dump((int)"010");
使用整数转换(int)将始终强制转换为默认基数,即10.
以这种方式将字符串转换为数字不会考虑在PHP中格式化整数值的许多方法(对于基数8,前导零,对于基数16引导"0x",对于基数2引导"0b").它将简单地查看字符串中的第一个字符并将它们转换为基数为10的整数.前导零会被剥去,因为他们在数值没有意义,所以你最终会与十进制值10的(int)"010".
转换的整数值基地之间使用(int)010 会考虑到格式的整数的各种方式.一个前导零,如010表示数字是八进制表示法,使用(int)010将它转换为8基数10中的十进制值.
这类似于您使用0x10十六进制(基数16)表示法编写的方式.使用(int)0x10将其转换为基数10十进制值16,而使用(int)"0x10"将以小数值结束0:因为"x"不是数值,所以之后的任何内容都将被忽略.
如果要将字符串解释"010"为八进制值,则需要指示PHP执行此操作.intval("010", 8)将解释基数为8而不是默认基数10的数字,最后将得到小数值8.您还可以使用octdec("010")将八进制字符串转换为十进制值8.另一种选择是使用base_convert("010", 8, 10)显式将数字"010"从基数8转换为基数10,但是此函数将返回字符串 "8"而不是整数8.
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |