PHP减法,值大于63

时间:2016-12-04 18:14:11

标签: php floating-point subtraction

在php算术运算中

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

我得到了0.1的答案,但是当我做同样的事情时     64.1-64我得到的结果是 0.099999999999994 为什么会这样?

1 个答案:

答案 0 :(得分:2)

许多语言(不仅仅是PHP)在运行于硬件(如大多数硬件)上运行时都存在问题,这些语言支持二进制或base-2(base-16作为简写)的浮点数,但不支持基数 - 10我们人类使用(并且通常假设是表示数字的唯一方法)。

对我们来说0.1是人类的基础10符号,意思是1 x 10 ** - 1。这在base-16中无法准确表示。最近的是9 x 16 ** - 2 + 9 x 16 ** - 3 ......

Base-10反过来有这个问题。 Base-10代表1/3的分数为0.333333 ......但如果我们使用base-3,它将是一个简洁的0.1 = 1 x 3 ** - 。

在PHP中,如果您需要更好的base-10精度,请使用BC Math functions

(注意一些硬件可以代表基数为10的数字。例如,50年以上的大型机有#34; packed decimal&#34;以及相应的本机操作码来处理这个。不足为奇,因为它们被构建为商业机器,可以准确地处理基本的10件事情,比如金钱!)。