2016-12-04 61 views
-2

在PHP運算PHP減法一個值超過63

<?php 
$lower = floor(63.1); 
$value = 63.1; 
echo $value - $lower;die; ?> 

我得到的答案是0.1,但是當我的 64.1-64做同樣的我得到的結果作爲 0.099999999999994 爲什麼它呢?

回答

1

這是多國語言,不只是PHP有一個問題,在硬件上運行(最喜歡的硬件),支持二進制或基數2(基地-16的簡寫)浮點但不是在基數爲10時我們人類使用(並且通常假設是表示數字的唯一方式)。

0.1對我們人類來說是一個基數爲10的符號,意思是1 x 10 ** - 1。這不能在base-16中精確表示。最接近的是9×16 ** - 2 + 9×16 ** - 3 ...

BASE-10具有在反向這個問題。 Base-10表示1/3的分數爲0.333333 ...但是如果我們使用的是base-3,它將是一個簡潔的0.1 = 1 x 3 ** - 1。

在PHP中,如果你需要更好的基礎-10的精度,使用BC Math functions。 (注意一些硬件可以代表以10爲底的數字,例如50多年的大型機有「packed decimal」和相應的本地操作碼來處理這個數據,這並不奇怪,因爲它們是作爲精確的商業機器構建的處理基本的東西,如金錢!)。