① phpexcel 获取99.9 得到的是99.90000000000001
这个不是phpexcel的问题,这个问题源于浮点数的表示方式,如果你会其它语言,你会发现其实很多其它编程语言也会有这种情况。
php官方文档也有说明:
浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
所以,如果你想在处理浮点数的时候得到相对满意的值,可能就需要自己专门处理,如:
$v = round($v, 2);
如果有兴趣,可以看下这里(网络规则限制,你自己吧url中的空格去掉):
http:// php. net /manual/zh/language.types.float.php
http:// en. wikipedia. org/wiki/IEEE_floating_point
② PHP如何格式化数字
PHP格式化数字的函数是number_format
我建议你去下载一个PHP的使用手册,或者看网上的在线手册也行。
http://www.itlearner.com/code/php/
关于他的用法如下:
语法: string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);
返回值: 字符串
函数种类: 数学运算
内容说明
本函数用来将浮点参数 number 格式化。若没加参数 decimals 则返回的字符串只要整数部份,加了此参数才依参数指定的小数点位数返回。参数 dec_point 表示小数点的表示方式方法,默认值是 ".",若需要转换成其它的小数点就可以在这个参数改掉。参数 thousands_sep 为整数部份每三位的分隔符号,默认值是 ","。本函数最特别的地方就是参数数目,最少要有一个,也就是欲格式化的字符串;也可以有二个或者四个参数,但不能用三个参数。治募�注意的是指定小数点的位数之后的数字直接舍弃,没有四舍五入的情形。
使用范例
<?
$short_pi = "3.14159";
$my_pi = number_format($short_pi, 2);
echo $my_pi."\n"; // 3.14
$foo = 850017.9021;
$new_foo = number_format($foo, 3, ".", " ");
echo $new_foo."\n"; // 850 017.902
?>
③ PHP使用 PHPExcel 导入excel中的时间后值变为了浮点数
在最近使用phpExcel导入表格中的数据解析时,发现时间导入后变成了浮点数类似:43911.144555这种
为什么会出现这种情况呢?
excel软件中的日期是从 1900-01-01 开始计算的
但是php 是从 1970-01-01开始计算的。
这两者间有一个天数差 25569
时间是格林威治时间
故此
可以用下面的方法去格式化表格导入的时间为php时间
d = 25569; //excel和php之间相差的时间
data - t);