简单的PHP数学算法在相同的输入值上返回不同的结果?

简单的PHP数学算法在相同的输入值上返回不同的结果?,php,int,precision,floating-accuracy,Php,Int,Precision,Floating Accuracy,我甚至不明白这是怎么可能的,下面的输出违背了我所有的编程知识 我正在编写一个特殊的舍入函数,因为标准的PHP舍入函数不符合我的要求 我将复函数的一部分提取为单独的函数special_round2,它按照我的设想工作-很好(请忽略它的用途,我的问题纯粹是关于数学计算) 当我在单独的php文件中运行上述代码时,结果很好: string(37) "double-2-2-100: 3842.15 384215 384215" 然而,我在类中实现了相同的代码作为函数的一部分。同样的代码块会给我不同的结果

我甚至不明白这是怎么可能的,下面的输出违背了我所有的编程知识

我正在编写一个特殊的舍入函数,因为标准的PHP舍入函数不符合我的要求

我将复函数的一部分提取为单独的函数
special_round2
,它按照我的设想工作-很好(请忽略它的用途,我的问题纯粹是关于数学计算)

当我在单独的php文件中运行上述代码时,结果很好:

string(37) "double-2-2-100: 3842.15 384215 384215"
然而,我在类中实现了相同的代码作为函数的一部分。同样的代码块会给我不同的结果(在相同的输入、相同的服务器、相同的PHP interpet上)

唯一的区别是,该函数是静态的,并且有一个可选参数及其标准类的成员,但它不是这段代码计算的一部分

public static function round_law($money, $decimals = 2, $presision = 2, $country_iso = self::ISO_CZE) {

//prevent invalid results
if ($decimals > $presision) {
    $presision = $decimals;
}
$exponent = pow(10, $presision);
$root_extended = $money * $exponent;

//remove decimals, dont round!!! Just simple cut.
$root_int = (int) $root_extended;
var_dump(gettype($money) . "-" . $presision . "-" . $decimals . "-" . $exponent . ": " . $money . " " . $root_extended . " " . $root_int);

//some other calulation, which should be irrelevant
// ....
当我运行函数
round\u law
时,我得到的一个输出是:

string(37) "double-2-2-100: 3842.15 384215 384214"
请注意,第一种情况下的最后一次转储数为384215,第二种情况下的最后一次转储数为384214(递减1)

是php错误吗我如何调试它?我是否遗漏了什么?我一直认为,复制粘贴的算法应该给我同样的结果

谢谢大家!

TL;TR


为什么
$root\u int=(int)$root\u扩展递减数,同时输入相同的
$root\u extended

我在这里得到了同样的结果:永远不要将货币表示为浮动货币。将其解析为字符串,将其存储为整数或专用的十进制类型(如果可用)。也有很多是正确的。
string(37) "double-2-2-100: 3842.15 384215 384214"