① 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);