PHP,无法将浮点数转换为GMP

3

我在PHP中想要比较两个浮点数,由于内部比较容易出错,所以我使用了GMP库,但是在简单的比较时它给了我一个错误

if (gmp_cmp(0.2, 0.1) > 0) echo "First number is bigger";

错误是“gmp_cmp():无法将变量转换为GMP-错误类型”。

1
尝试使用gmp_cmp("0.2", "0.1"),如果我没记错的话,参数应该是数字字符串。 - Chase Walden
比较两个浮点数是否“相等”的一种方法是将它们相减,并检查结果的绝对值是否小于某个小值。 - Ryan Vincent
@ChaseWalden 没有起作用。 - omidh
@RyanVincent 但我不是在寻找相等性。 - omidh
1
你可以使用 @RyanVincent 描述的相同技巧来检查小于或大于。如果 a - b > 0,则 a > b。 - Chase Walden
@ChaseWalden 已经生效,谢谢。 - omidh
1个回答

2
如果你想使用GMP,请尝试以下方法:

a = "0.2";
b = "0.1";

a_s = explode(".", $a); // split on decimal point
b_s = explode(".", $b);

if (gmp_cmp(a_s[0], b_s[0]) > 0 || 
   (gmp_cmp(a_s[0], b_s[0]) == 0 && gmp_cmp(a_s[1], b_s[1]) > 0))

   echo "First number is bigger";

这将在小数点处分割a和b。如果a比b大(忽略小数部分),则第一个数字更大。如果a和b相同(忽略小数位),则仅比较小数部分以确定a是否比b大。
希望这可以帮助您。

@omidh,如果这对您有用,请将其标记为答案。非常感谢。 - Chase Walden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接