PHP 大于 63 的减法

PHP subtraction with a value more than 63

中php算术运算

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

我得到的答案是 0.1,但是当我对 64.1-64 我得到的结果是 0.099999999999994 为什么会这样?

很多语言,不仅仅是 PHP 都有这个问题,当 运行 在支持二进制或 base-2 浮点(base-16 作为shorthand) 但不是我们人类使用的 base-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**-1.

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

(请注意,某些硬件可以表示以 10 为基数的数字。例如,50 多年来的大型机都有“packed decimal”和相应的本机操作码来处理这个问题。这并不奇怪,因为它们是构建的作为准确处理以 10 为基数的事物(如金钱)的商业机器!)。