2016-12-04 75 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”和相应的本地操作码来处理这个数据,这并不奇怪,因为它们是作为精确的商业机器构建的处理基本的东西,如金钱!)。