Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
值大于63的PHP减法_Php_Floating Point_Subtraction - Fatal编程技术网

值大于63的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中的算术运算

<?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进制的数字,如金钱!)