php中浮点型的精确度,PHP中的浮点精度和类型
PHP中的浮点数
PHP浮点数精度
在PHP中,浮点数的字长和平台相关,通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)。
浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。
floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118…
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
PHP浮点数比较
由于浮点数内部表示导致的精度缺失问题,所以比较浮点数是不能使用相等,而要判断比较的数值之间的差值是否在某个最下误差范围内。
这个最下误差也被称为机器极小值(epsilon)或最小单元取整数,是计算中所能接受的最小的差别值。
NaN
某些数学运算会产生一个由常量 NAN 所代表的结果。此结果代表着一个在浮点数运算中未定义或不可表述的值。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE。
由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。
PHP中数值的近似
在PHP中,经常会遇到对浮点数进行四舍五入,下面列出一些常用的PHP中的精度取舍函数。
float ceil ( float value ):对value向上取整(舍去小数部分并加1)
float floor ( float value ):对value向下取整(舍去小数部分)
float round ( float val [, int precision] ):将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入
string sprintf ( string format [, mixedargs [, mixed $… ]] ):格式化字符串
PHP中强制类型转换
使用类型提示符
这种方式通过在需要转换类型的变量前加上类型提示符,如下:
(int) :转换为整形
(bool) :转换为布尔型
(float) :转换为浮点型
(string) :转换为字符串
(array) :转换为数组
(object) :转换为对象
使用类型转换函数
PHP中提供了类似 intval(),floatval() 系列的类型转换函数:
intval() :转换为整形
boolval() :转换为布尔型
floatval() :转换为浮点型
strval() : 转换为字符串
使用settype()
settype函数的声明为:bool settype ( mixed &var , stringtype ),用于设置变量的类型。type可以为:
“boolean” 或者 “bool”
“integer” 或者 “int”
“float” 或者 “double”
“string”
“array”
“object”
“null”
当改变类型成功后返回true,否则返回false
PHP中的类型判断
和 settype() 对于,可以使用gettype()函数来获取变量的类型:string gettype ( mixed $var ),返回值可能为:
“boolean”(从 PHP 4 起)
“integer”
“double” (由于历史原因,如果是 float 则返回“double”,而不是“float”)
“string”
“array”
“object”
“resource”(从 PHP 4 起)
“resource (closed)” (PHP 7.2.0添加)
“NULL”
“user function”(只用于 PHP 3,现已停用)
“unknown type”
对于 function 类型的变量,使用 function_exists() 和 method_exists() 来进行判断。
另外PHP中还有一系列类似 is_array() 系列的: bool is_TYPE(mixed $var) 函数可以判断类型,它们都接受一个变量参数,如果是指定类型,则返回true,否则返回false,如下:
is_bool(): 检测变量是否为布尔类型
is_string(): 检测变量是否为字符串
is_int(): 检测变量是否为整形
is_float(): 检测变量是否为浮点型
is_null(): 检测变量是否为空NULL
is_numeric(): 检测变量是否为数字或数字字符串
is_array(): 检测变量是否为数组
is_callable(): 检测变量是可以作为函数调用
is_object(): 检测变量是否为对象
is_resource(): 检测变量是否为资源类型
is_scalar(): 检测变量是否是一个标量
由于 gettype() 函数涉及到字符串比较,所以一般推荐使用 is_TYPE() 系列函数更加快速。
最后对于 object 对象,可以使用 get_class() 函数返回对象的类名,返回的类名包含完整的命名空间。
php中浮点型的精确度,PHP中的浮点精度和类型相关推荐
- 【C语言】浮点型数据在内存中的存储方式
目录 一. 前言 二. 问题的引出 三. 两类浮点型数据(float.double)在内存中的存储方式 3.1 两类浮点型数据的存储模型 3.1.1 浮点型数据数值读取的通用模型 3.1.2 floa ...
- php中bc,php中BC高精确度函数库
php中BC高精确度函数库,php bc math 包含了:相加,比较,相除,相减,求余,相乘,n次方,配置默认小数点数目,求平方,这些函数在涉及到有关金钱,高精度百分比时比较有用. 例如下图中使用准 ...
- java浮点型数据类型分为_java中的浮点型数据类型有哪几种
java中的浮点型数据类型有哪几种 发布时间:2020-06-23 14:14:45 来源:亿速云 阅读:67 作者:元一 这篇文章将为大家详细讲解有关java中的浮点型数据类型,文章内容质量较高,因 ...
- java中的基本数据类型_Java中的基本数据类型和引用数据类型
数据类型用于帮助确定变量可存放的一组值,以及可对这组特定值执行的操作.Java提供了在所有平台上都普遍支持的多种数据类型. 一.基本数据类型 byte:Java中最小的数据类型,在内存中占8位(bit ...
- java 指针 引用_java中的引用与c中的指针
指针 首先要弄清楚指针和c中的指针是不一样的,前者是概念,后者是具体实例. 换句话说,C中的指针只是指针中的一种,其他语言也有指针,比如C++.但是我们同别人交流的时候,大都不会从概念上去交流,一般会 ...
- python语言中、复数类型中实数部分_python学习03.02:Python数值类型(整形、浮点型和复数)及其用法...
实际开发中,我们经常需要使用数字记录游戏中用户的得分.游戏中角色的生命值.伤害值等信息,Python 语言提供了数值类型用于保存这些数值. 需要注意的是,Python 中这些数值类型都是不可改变的,也 ...
- java++biginter_Java中的BigInteger在ACM中的应用
Java中的BigInteger在ACM中的应用 在ACM中的做题时,经常会遇见一些大数的问题,这是当我们用C或是C++时就会觉得比较麻烦,就想有没有现有的现有的可以直接调用的BigInter,那样就 ...
- python中替换字符串中字符_python替换字符串中的某个字符
python_split_strip_replace使用方法 使用python时会经常要对字符串做一些处理,比如:分割字符串.去掉空格.替换字符串 中的某个字符等,下面介绍下这几个功能的使用. 一. ...
- CVPR2020:点云分析中三维图形卷积网络中可变形核的学习
CVPR2020:点云分析中三维图形卷积网络中可变形核的学习 Convolution in the Cloud: Learning Deformable Kernels in 3D Graph Con ...
最新文章
- 【C++】多线程与互斥锁【二】
- python编程中文版百度百科_1.2 搭建python+pycharm编程开发环境
- PYTHON学习0022:函数基本介绍----2019-6-17
- Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手
- Vue 实现图片在循环中 默认 和 选中 之间的点击切换
- php 获取当月的阴历值,PHP计算节日、节气、农阳历互换的代码
- 2.12 向量化的更多例子
- 遗传算法MATLAB工具包简介
- nsurl转nsdata_ios 中NSData 拼接成功,但写入本地种只有前面的data
- python颜色过渡
- 工作流任务的权限问题
- 蘑菇街直播实战技巧带你解决直播开发难题
- 90后游戏开发大神毛星云跳楼自杀!8年执着国产3A梦碎
- socket通信sendto函数导致Segmentation fault问题解决
- 分割整数构成字母字符串(动态规划)
- java的setbounds_Swing-setBounds()用法-入门
- Arduino智能小车设计(一)
- Bond随你入坑kubernetes之:入门篇 - 搭建多节点集群+Dashboard+监控
- 网页视频播放的去Flash方案
- 聊聊Kafka中值得我们学习的优秀设计
热门文章
- android中互斥的控件,Android控件之Radiobutton与RadioGroup
- 威联通nas怎么更换大硬盘_QNAP NAS在线RAID组态迁移及在线RAID容量扩充教程
- 空客fctm避免已识别风险_最远可航行15000公里,南航首架空客A350飞机首航,将先飞广州-上海航线再飞国际...
- linux可以打开浏览器嘛,Linux下怎样可以打开浏览器
- Linux虚拟内存管理(glibc)
- Cpp 对象模型探索 / 系列文章的索引
- 临时变量不能作为非const引用
- 2019江西高考理综和计算机,2019年江西高考理综是不是全国卷
- brew install php55redis,Mac下安装LNMP环境
- 聚焦可信AI与产业应用,百度联合发起千言计划实现情感分析2.0升级