PHP中字符串类型与数值类型混合计算

字符串转数值的规则

当一个字符串被当作一个数值来取值,其结果和类型如下:

如果该字符串没有包含 ‘.’,’e’ 或 ‘E’ 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。

该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 ‘e’ 或 ‘E’ 后面跟着一个或多个数字构成。

如下会被转成整数:

[+/-][0-9][*]

如下会被转成浮点型数:

[+/-][0-9][.][0-9][e/E][0-9][*]

示例

$r = ‘123‘ + 1;
var_dump($r);
// 输出结果 int(124)

$r = ‘123.4‘ + 1;
var_dump($r);
// 输出结果 float(124.4)

$r = ‘1.5e4‘ + 1;
var_dump($r);
// 输出结果 float(15001)

$r = ‘123456789123456789‘ + 1;
var_dump($r);
// 输出结果 float(1.2345678912346E+17)

$r = ‘123abc‘ + 1;
var_dump($r);
// 输出结果 int(124)

$r = ‘123e1abc‘ + 1;
var_dump($r);
// 输出结果 float(1231)

$r = ‘123.abc‘ + 1;
var_dump($r);
//输出结果 float(124)

$r = ‘+123abc‘ + 1;
var_dump($r);
// 输出结果 int(124)

$r = ‘-123abc‘ + 1;
var_dump($r);
// 输出结果 int(-122)

$r = ‘abc‘ + 1;
var_dump($r);
// 输出结果 int(1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

更好的方式

已经确定需要的是整数(浮点数),则可以使用intval()floatval())先将字符串转换成整数(浮点数),然后再与其他数值进行计算。

判断字符串是否为整数

HTTP GET/POST提交的数据,可以通过该方式进行校验。

$str = ‘123‘;
$r = ‘‘.intval($str) == $str; //需要将字符串转成整形然后再变回去,再和原字符串做比较
var_dump($r);
// 输出结果 true

$str = ‘123abc‘;
$r = ‘‘.intval($str) == $str;
var_dump($r);
// 输出结果 false

原文地址:http://blog.csdn.net/zhyoulun/article/details/52596532
时间: 2024-10-12 04:32:24

PHP中字符串类型与数值类型混合计算的相关文章

oracle中的常用函数、字符串函数、数值类型函数、日期函数,聚合函数。

一.字符串的常用函数. --一.oracle 字符串常用函数 --1. concat 连接字符串的函数,只能连接[两个]字符串. 字符写在括号中,并用逗号隔开! --2.“||”符号可以连接多个字符串 直接用||将多个字符链接即可. --3. dual? dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录. select concat('lo','ve')from dual; select concat('o','k')from dual; sel

sql server将字符串类型转换为数值类型

在SQL Server中,将字符串的值转换为数值类型的值可以有三种方法. 1.使用cast()方法. select cast('6.0' as decimal(6, 2)); -- 6.00 2.使用convert()方法. select convert(decimal(6, 2), '100'); -- 100.00 3.使用与数值0相加的方法. select '233' + 0; -- 233 以上三种方法在转换类型的时候都要格外注意被转换类型的值,因为可能会出现各种强制转换失败的问题,比如

Puppet数据类型中[数值类型,数组的使用] (十四)

本文主要写puppet的数据类型中的数值类型和数组的使用,博主puppet为3.8版本,puppet数组的追加功能测试没有成功,官网也没有给出示例,确定是否已经优化或者取消.官网数据类型连接地址 https://docs.puppet.com/puppet/3.8/lang_datatypes.html puppet的数据类型 目前puppet支持字符串类型.数字.数组.哈希.布尔型.undef和正则表达式. 一.字符串类型 定义字符串需要以双引号("")或单引号('')进行声明,在p

MySQL数值类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT.REAL和DOUBLE PRECISION). 关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词. BIT数据类型保存位字段值,并且支持MyIS

数值类型与字节数组之间的相互转换

我们在上文 如何选择使用字符串还是数字呢? 中阐述了使用数值类型的好处,那么问题来了,如何在数值类型与字节数组之间相互转换呢? 我们先看看单个数值类型和字节数组之间的转换,我们以Integer类型为例: public static byte[] intToBytes(int x) {     ByteBuffer intBuffer = ByteBuffer.allocate(Integer.BYTES);     intBuffer.putInt(0, x);     return intBu

【SQLServer笔记】SQLServer数值类型的NULL性

与C#.java等编程语言不同,在SQLServer中,int等数值类型的初始值为NULL,并且可以直接使用赋值运算符赋值为NULL,同时值为NULL的变量无法在消息栏中显示其值,只能在结果栏中显示NULL. 同时由创建数据库时的选项,当字符数据以“+”连接值为NULL的变量时,会导致连接后的结果为NULL. 1 DECLARE @ID INT; 2 SET @ID=NULL; 3 --以“+”链接NULL值与非NULL值后输出 4 PRINT '第一次输出@ID开始' 5 PRINT '当前@

PEP 3141 数值类型的层次结构 -- Python官方文档译文 [原创]

PEP 3141 -- 数值类型的层次结构(A Type Hierarchy for Numbers) 英文原文:https://www.python.org/dev/peps/pep-3141 采集日期:2020-02-27 PEP: 3141 Title: A Type Hierarchy for Numbers Author: Jeffrey Yasskin [email protected] Status: Final Type: Standards Track Created: 23-

c#数值类型以及继承情况

一.数值类型继承 数值类型都是继承于valueType  存放在栈中  读写速度快,引用类型放在堆中慢. 二.定义可为空的数值类型 int x1=null;//编译器报错 int? x1=null;//正确 三.自定义枚举值范围 一般情况下枚举的数值类型为int  但是需要的时候也可自定义范围,比如 enum MyselfEnum:byte { x1=0x1, x2=327,//这里会报错,超出了范围 }

Python的数值类型

问题: 1. Python数值有哪些? 2. 各类型的精度是多少? 3. 类型的转换是如何实现的? 5. 如何使用这些数据类型?需要注意什么? 6. 什么是不可变类型? 数值类型:     整型: (不可变类型)         标准整型:取值范围[-sys.maxint-1, sys.maxint]         长整型:可表示无限大的整数,其值仅与你机器支持的(虚拟)内存大小有关         数值超出标准整型范围将会转换为长整型.         例如:             1.定