October 16, 2020

3 min to read

PHP Intval 的 8、7 運算 8、7 問題

欸欸、乾太,你 php 小數計算會使用套件嗎?還是使用原生的方法進行運算?因為我遇到一個問題,我有 $a = 0.1 與 $b = 0.7 這兩個變數,把他們相加乘以 10 之後,應該得出的答案是 8 沒錯吧?但我 intval 之後他給我 7 欸。

intval 這個是獲得變數其整數的方法,因此先來看個 php.net 官方文件。

intval

function intval ($var, $base = null) {}

Get the integer value of a variable

intval

Get the integer value of a variable

function intval($var, $base = 10) { }

@param mixed $var — The scalar value being converted to an integer

@param int $base — [optional]

The base for the conversion

@return int

The integer value of var on success, or 0 on failure. Empty arrays and objects return 0, non-empty arrays and objects return 1.

The maximum value depends on the system. 32 bit systems have a maximum signed integer range of -2147483648 to 2147483647. So for example on such a system, intval('1000000000000') will return 2147483647. The maximum signed integer value for 64 bit systems is 9223372036854775807.

Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of integer casting apply.

@link https://php.net/manual/en/function.intval.php

Get the integer value of a variable

intval( mixed $var [, int $base = 10 ]): integer

那我們就不囉唆,實際來測試一下 intval 如果真的把 $a = 0.1 與 $b = 0.7 相加後乘以 10 會得出什麼結果?

$a = 0.1;

$b = 0.7;

$c = intval(($a + $b) * 10);

echo $c; // 7

這問題還蠻神奇的,那如果以此類推的話,乘以 20 會得到 14,乘以 100 會得到 70 囉?二話不說馬上來測試。

$a = 0.1;

$b = 0.7;

$c = intval(($a + $b) * 20);

echo $c; // 15

$c = intval(($a + $b) * 100);

echo $c; // 80

這樣的結果還蠻訝異的,它居然會在乘以 20 的時候 $a + $b 就變成 7.5,然後乘以 100 的時候則變成 8,這個 $a + $b 的內容是什麼,我們有必要來檢查一下。

$a = 0.1;

$b = 0.7;

$c = $a + $b;

echo $c; // 0.8

$c = $c * 10;

echo $c; // 8

到這邊都還蠻正常的,我們已經可以確信 $c 是 8,所以如果我直接把 $c 丟進去 intval 的話,整數 8 進去應該會獲得整數 8 囉?

$a = 0.1;

$b = 0.7;

$c = $a + $b;

$c = $c * 10;

echo intval($c); // 7

反正無論如何,我只要確信我給 intval 的是 8,無論這個 8 是整數是浮點數是字串,只要它看起來像 8,只要你看得懂我給你的是 8 的話,你就會跟我說 8 對不對?

intval: 對。

$a = 0.1;

$b = 0.7;

$c = $a + $b;

$c = $c * 10;

echo intval(strval($c)); // 8

我把 $c 給先轉成字串,再把它 intval 去處理,最後終於真真切切地得到 8 了,但這不像是一個好的做法,因此在此推廣 …

珍惜生命,請學習型別宣告。

(double) $a = 0.1;

(double) $b = 0.7;

(int) $c = ($a + $b) * 10;

echo $c; // 8

php intval 运算,PHP Intval 的 8、7 運算 8、7 問題相关推荐

  1. 【文献阅读02】基于模拟RRAM支持全并行乘累加运算的全集成78.4TOPS/W存算芯片

    标题:A Fully Integrated Analog ReRAM Based 78.4TOPS/W Compute-In-Memory Chip with Fully Parallel MAC C ...

  2. 刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别

    intVal($str) 跟 (int) $str 都是把其他类型的变量转化为int型变量的方式,这么多年来我一直森森滴怀疑它们的运算结果在某些条件下会有区别.对于我的疑问,文档里也没有多说(或者我没 ...

  3. php中int()强制转换,php下intval()和int强制转换使用的区别是什么

    php下intval()和int强制转换使用的区别是:1.[intval()]如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值:2.转换为int的PHP字符串,在使用之前 ...

  4. php intval 变小,php intval() 小数时安全漏洞分析

    变量转成整数类型. 语法: int intval(mixed var, int [base]); 返回值: 整数 函数种类: PHP 系统功能 内容说明 本函数可将变量转成整数类型.可省略的参数 ba ...

  5. 经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已~~主要是:ceil,floor,round,intval...

    ceil -- 进一法取整 说明 float ceil ( float value ) 返回不小于 value 的下一个整数,value 如果有小数部分则进一位.ceil() 返回的类型仍然是 flo ...

  6. php坐标轴取整,PHP取整函数:ceil,floor,round,intval的区别详细解析

    我们经常用到的PHP取整函数,主要是:ceil,floor,round,intval. ceil -- 进一法取整说明float ceil ( float value ) 返回不小于 value 的下 ...

  7. php下intval()和(int)转换使用与区别

    来源:http://www.jb51.net/article/15174.htm 想知道使用intval()和(int)转换有什么区别?或者说两者有什么不同,包括功能.定义方面的.或者和使用频率.效率 ...

  8. php 四舍五入百位,php取整函数ceil,floor,round,intval函数的区别

    1.ceil - 进一法取整 说明 float ceil ( float $value ) 返回不小于 value 的下一个整数,value 如果有小数部分则进一位.ceil() 返回的类型仍然是 f ...

  9. php中intval函数用法,php intval函数用法总结

    语法: int intval ( $var, $base ) 参数: 此函数接受两个参数,其中一个是必需的,而另一个是可选的. 参数如下所述: $var:这是一个必需参数,用作需要转换为整数值的变量. ...

最新文章

  1. Chrome 94 加入网页开发新技术,或有助于提高云游戏体验
  2. 递归式求时间复杂度的递归树的方法举例说明
  3. (转)同一服务器部署多个tomcat时的端口号修改详情
  4. .net 中debug 微软内部代码
  5. c#web页面显示弹窗_web页面实现PDF读取显示
  6. 26期20180615磁盘格式化挂载以及手动增加swap空间
  7. Oracle Goldengate 安装配置
  8. ASP.NET2.0 Person Web Site:将图片以二进制的从数据库读取
  9. 玛雅Maya 2022 for Mac(三维动画制作软件)
  10. react实例9-拖拽2
  11. mac 学习 java_Mac 新手从零学习JAVA 环境配置篇
  12. 关于超定方程组的解算方法
  13. Springboot集成使用阿里云kafka详细步骤
  14. 永恒骑士 小程序服务器列表空,微信小程序一键登录应用服务器通过AES解密返回purePhoneNumber为空?...
  15. Eclipse显示单词拼写错误The word ‘url‘ is not correctly spelled
  16. contest 12.31
  17. 【NLP】中文文本分类数据增强方法:EDA 与代码实现
  18. 【论文翻译】Occluded Prohibited Items Detection
  19. 语音数据标注工具与平台/公司
  20. python识别颜色并提取轮廓_pythonopencv检测并提取目标颜色

热门文章

  1. Ubuntu 16.04 Hadoop-2.7.3全分布模式 + eclipse hadoop
  2. C++ 之const的使用
  3. zabbix专题:第七章 添加图像Graphs,添加聚合图形Screens
  4. jdk动态代理和cglib的区别
  5. 事件EVENT与waitforsingleobject的使用以及Mutex与Event的区别
  6. loadrunner11完整卸载
  7. 20140120收藏夹
  8. http协议 web开发的应用 笔记
  9. ORM Designer for Rails Demo
  10. python颜色列表代码seaborn_在Python中Seaborn – 根据色调名称更改条形颜色