如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的,我用python也遇到这个问题。所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面介绍一下一些常用的BC高精确度函数使用。

php BC高精确度函数库包含了:相加,比较,相除,相减,求余,相乘,n次方,配置默认小数点数目,求平方。这些函数在涉及到有关金钱计算时比较有用,比如电商的价格计算。

/**
* 两个高精度数比较
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return int $left==$right 返回 0 | $left<$right 返回 -1 | $left>$right 返回 1
*/
var_dump(bccomp($left=4.45, $right=5.54, 2));
// -1 /**
* 两个高精度数相加
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcadd($left=1.0321456, $right=0.0243456, 2));
//1.04 /**
* 两个高精度数相减
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcsub($left=1.0321456, $right=3.0123456, 2));
//-1.98 /**
* 两个高精度数相除
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcdiv($left=6, $right=5, 2));
//1.20 /**
* 两个高精度数相乘
*
* @access global
* @param float $left
* @param float $right
* @param int $scale 精确到的小数点位数
*
* @return string
*/
var_dump(bcmul($left=3.1415926, $right=2.4569874566, 2));
//7.71 /**
* 设置bc函数的小数点位数
*
* @access global
* @param int $scale 精确到的小数点位数
*
* @return void
*/
bcscale(3);
var_dump(bcdiv('105', '6.55957'));
// 16.007 注意点:关于设置的位数,超出部分是丢弃掉,而不是四舍五入

  

php浮点数计算问题的更多相关文章

  1. js浮点数计算问题 + 金额大写转换

    一 js浮点数计算问题解决方案: 1.使用 NumberObject.toFixed(num) 方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 2.较精度计算浮点数 ...

  2. php浮点数计算比较及取整不准确解决方法

    原文:php浮点数计算比较及取整不准确解决方法 php有意思的现象,应该是很多编程语言都会有这样的现象.这个是因为计算机的本身对浮点数识别的问题..... $f = 0.58; var_dump(in ...

  3. 关于js浮点数计算精度不准确问题的解决办法

    今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精 ...

  4. jmeter 中 浮点数计算精度问题

    jmeter 中 浮点数计算精度问题解决方法: 编写 beanshell 时使用 java.math.BigDecimal 方法构造,使用 BigDecimal 并且一定要用 String 来够造. ...

  5. 【VBA研究】浮点数计算总是有误差的

    作者:iamlaosong 数字有两种表达方式.一种是整数,一种是浮点数.浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示随意某个实数.详细的说,这个实数由一个整数或定点数(即尾数 ...

  6. Vim技能修炼教程(16) - 浮点数计算函数

    浮点数计算函数 这一节的所有函数,只有在vim编译时支持了+float时才有效. 三角函数 sin() : sine正弦函数 cos() : cosine余弦函数 tan() : tangent正切函 ...

  7. 如何避开JavaScript浮点数计算精度问题(如0.1+0.2!==0.3)

    不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.60000000000 ...

  8. php踩过的那些坑(5)浮点数计算

    一.前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦.比如今天工作终于到的一个案例: $a = 2586; $ ...

  9. 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS浮点数计算精度问题

    本文讲解的是怎么实现一个工具库并打包发布到npm给大家使用.本文实现的工具是一个分数计算器,大家考虑如下情况: \[ \sqrt{(((\frac{1}{3}+3.5)*\frac{2}{9}-\fr ...

  10. Java 高精度浮点数计算工具

    说起编程中的高精度数值,我第一反应就是double类型了.的确,double阶码11位,尾数52位,几乎能应对任何苛刻的要求......然而,当我天真地尝试用double来算泰勒展开式的函数值,离散代 ...

随机推荐

  1. web异常、并发与安全

  2. Linux常用命令_(网络管理)

    网络信息:hostname.netstat.route.ifconfig网络配置:netconfig网络测试:ping hostname–查看主机名称ifconfig–查看和设置网络配置–ifconf ...

  3. libyuv 编译 for android

    libyuv is an open source project that includes is an instrumentation framework for building dynamic ...

  4. Source insight怎样恢复默认界面布局 窗口嵌入

    先关闭,然后在c盘的文档的Source Insight\Settings目录里面,将CF3文件剪切到别的地方,再打开 不过有些其它设置也会丢失,需要重新设置,参见Source_Insight破解版下载 ...

  5. SU Demos-02Filtering-05Suk1k2filter

    本人数学不咋地,本demo也是一知半解,敬请谅解. 这是生成的脉冲数据

  6. SVN标准命令

    SVN标准命令 范例 checkout 检出 svn  co  URL 检出app/search/news/apache/主干上最新版本到本地工作副本,可执行命令: svn co  https://s ...

  7. 使用GCD

    使用GCD 什么是 GCD Grand Central Dispatch (GCD) 是 Apple 开发的一个多核编程的解决方法.该方法在 Mac OS X 10.6 雪豹中首次推出,并随后被引入到 ...

  8. 李洪强 - C语言8-Scanf函数

    C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间 ...

  9. ajax无刷新获取php后台数据

    $.ajax({ url:"result.php", //data:{"page":i}, dataType:"json", beforeS ...

  10. 转载:hdu 动态规划题集

    1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955     背包;第一次做的时候把概率当做背包(放大100000倍化为整数): ...