值大于63的PHP减法
php中的算术运算值大于63的PHP减法,php,floating-point,subtraction,Php,Floating Point,Subtraction,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)形式的浮点,而不是我们人类使用的base-10形式的浮
<?php
$lower = floor(63.1);
$value = 63.1;
echo $value - $lower;die; ?>
我得到的答案是0.1,但当我对
64.1-64我得到的结果是
0.099999999999994
为什么会这样?这是一个问题,许多语言,不仅仅是PHP,在硬件(像大多数硬件一样)上运行时都会遇到这个问题,这些硬件支持二进制或base-2(简写为base-16)形式的浮点,而不是我们人类使用的base-10形式的浮点(通常认为这是表示数字的唯一方式) 对我们人类来说,0.1是一个以10为基数的符号,表示1 x 10**-1。这在base-16中无法准确表示。最近的是9x16**-2+9x16**-3 Base-10的问题正好相反。碱-10表示分数1/3为0.333333。。。但是如果我们使用base-3,它将是一个简洁的0.1=1x3**-1 在PHP中,如果需要更好的base-10精度,请使用 (注意,一些硬件可以用10进制表示数字。例如,50多年来,大型机都有“”和相应的本机操作码来处理这个数字。这并不奇怪,因为它们是作为商业机器构建的,用于准确处理10进制的数字,如金钱!)