下文来为各位介绍Php处理浮点数的问题了,如果各位在使用过程中碰到这些问题我们可以一起来看看,希望文章对各位有帮助

公司要对产品价格做调整,因为做的外贸商城,所以价格要和国际接轨。比如国外的价格展示方式是:$35标识为$35.00; $56.2标识为:$56.20.

通过sprintf(“%1\$.2f”,$price)解决了上面的需求,但是新的问题出现,有价格为0的会处理为0.00.

通过empty()和判断是否相等,无法识别符点数0.00;通过百度总结了下面处理浮点数的方法。

浮点数0.00的处理

通过intval转换为整形intval(0.00) 变为0,只针对0.00使用intval处理;可以看先的例子你就明白了。

例子1:

$n=”19.99″;

print intval($n*100); //输出的结构是1998,而不是1999;

print intval(strval($n*100));//这个输出的才是1999;

例子二:

echo floor((0.1+0.7)*10);//输出的是7,而不是8;

echo floor(strval((0.1+0.7)*10));//这个才是8;

在php中一些简单的浮点数据在内部不能以精确的二进制来表示的。这和计算机的数据表示相关,即:不可能以有限的二进制来表示某些十进制的分数。永远不要相信浮点数的结果精确到了最后一位, 也永远不要比较两个浮点数是否相等。

上面的2个例子,总结出php处理浮点数的方式是将其转成字符串, 可以通过strval或者使用printf/sprintf将浮点数转成字符串.

浮点数精度

显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。

这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。

转载于:https://www.cnblogs.com/focai/p/4452821.html

深入分析Php处理浮点数的问题相关推荐

  1. 关于float浮点数计算精度问题的深入分析

    在Java中,或者说在任何一门语言中,float和double两种类型浮点数计算的精度问题都是老生常谈了.在进行跟钱相关的计算时(毕竟是白花花的银子)的时候如果不注意这两种浮点类型往往会出现许多莫名其 ...

  2. c语言浮点数能用八进制输出不,深析C语言浮点型数据的输入输出

    方星星 吕永强 摘  要 C语言的基本数据类型分为:整型.字符型和浮点型,大多C语言教材都概括了整型和字符型数据的编码及输入输出,但并未详细介绍浮点型数据的编码及输入输出,这导致很多学生不能灵活运用这 ...

  3. python中的进制转换以及浮点数二进制转换

    为什么要注意这三点: 1.首先是项目中用到的进制转换,常用的int ord hex 以及编写的转换函数,作为记录 2.其次是python 3相对于旧版主要的区别就在这里,主要是bytes 和 stri ...

  4. python 浮点数未解之谜

    疑问: print(8.1+0.03)ouput: 8.129999999999999 print(0.1+0.1+0.1-0.3)output: 5.551115123125783e-17 结论 多 ...

  5. C语言中将0到1000的浮点数用强制指针类型转换的方式生成一幅图像

    搞过计算机图像的人都知道,图像中的每一个像素通常为一个整型数,它可以分成4个无符号的char类型,以表示其RGBA四个分量.一幅图像可以看做是一个二维整型数组.这里我会生成一个float数组,其数组大 ...

  6. IEEE-754标准(32位) 十六进制转换十进制浮点数

    因实验需要,读取陀螺仪的数据是16进制的数据,需要将该数据转化为10进制方便自己查看,理解.记录如下: 1.将(32位)16进制IEEE-754标准浮点数就是用十六进制表示浮点,称为单精度浮点数. f ...

  7. JS加法函数,用来得到精确的加法结果(说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果)

    //加法函数,用来得到精确的加法结果 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较为精确的加法结果. //调用:accAdd(arg1,arg2) ...

  8. codevs 1203 判断浮点数是否相等

    1203 判断浮点数是否相等  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 青铜 Bronze 题目描述 Description 给出两个浮点数,请你判断这两个浮点数是否相等 ...

  9. android AIDL IPC深入分析

    深入分析AIDL原理 博客分类: Android 在上一篇文章(Service使用方式)中,介绍了Android进程间通信(IPC)的使用,并给出了一个示例.但并没有深入分析aidl是怎样可以做到进程 ...

最新文章

  1. Python TypeError: ‘int‘ object is not iterable
  2. guava之Stopwatch
  3. 精简JRE第一步 — 精简bin目录
  4. Java 1.8 HashMap源码探究
  5. leetcode50. Pow(x, n)(快速幂)
  6. [android] 手机卫士保存安全号码
  7. python画柱状图-Python绘制精美图表之双柱形图
  8. wait()和sleep()区别(常见面试题)
  9. Kafka权威指南,Kafka生产者
  10. 肌电|表面肌电应用的新进展
  11. lammps软件介绍与使用
  12. Oracle执行计划使用分析SQL执行效率
  13. radam+lookahead optimizer
  14. php 最常用的内置函数大全
  15. oracle vm 产品介绍,Oracle VM Server for SPARC 产品概述
  16. 4、python开源——scrapy爬虫天气预报
  17. 计算机历史ppt 英文儿童,第一课-计算机发展历史ppt
  18. 51单片机的智能窗帘设计
  19. 澳禁止华为参与5G网络建设;锤子将编写自己的OS;国产处理器兆芯可运行Windows,已试制出Intel i5级处理器丨Q新闻...
  20. XCP实战系列介绍04-CANape工程配置超详细介绍

热门文章

  1. CAN协议,系统结构和帧结构
  2. Pixhawk原生固件PX4之位姿控制算法解读
  3. Pixhawk的传感器数据(陀螺、加计等)流程
  4. [转] CMake入门
  5. [BUUCTF-pwn]——judgement_mna_2016
  6. [Jarvis OJ - PWN]——Backdoor
  7. [BUUCTF-pwn]——rip
  8. 5G NR RLC:PDU Parameters
  9. 5G NR PUCCH资源配置
  10. hibernate之生成的和默认的属性值(使用generated刷新实体) .