分割两个整数时如何获得浮点值?(PHP)

use*_*257 20 php floating divide

嗨我试图划分两个整数ex:12/13但我总是得到整数1而不是十进制数.

我尝试输入值,然后手动浮动,但没有成功.

基本上我只想要一个十进制结果,如:0.923 ......

$x = 12;
$y = 13;
echo $value = $x / $y; //Would like to see 0.923 not 1
Run Code Online (Sandbox Code Playgroud)

CSᵠ*_*CSᵠ 13

在正常情况下,您的代码应返回浮动值0.923076...

你得到一个舍入整数的原因可能是因为你有你ini setting"precision"设置0,为了解决这个问题,你php.ini可以ini_set("precision", 3);在计算之前编辑或使用你的代码.

另一种解决方法是使用BCmath:

echo $value=bcdiv($a, $b, 3);
Run Code Online (Sandbox Code Playgroud)

而另一种不使用任何扩展的方法是使用一个小数学技巧,将你想要除以的值乘以1000得到3 decimals.
这样,你会除以12000通过13,整个部分会923因为你乘以1E3插入前的最后一次最3位逗号/点,那么.

function divideFloat($a, $b, $precision=3) {
    $a*=pow(10, $precision);
    $result=(int)($a / $b);
    if (strlen($result)==$precision) return '0.' . $result;
    else return preg_replace('/(\d{' . $precision . '})$/', '.\1', $result);
}
Run Code Online (Sandbox Code Playgroud)

echo divideFloat($a, $b); // 0.923


Raf*_*llo 13

echo $value = $x / (float) $y;
Run Code Online (Sandbox Code Playgroud)

如果将变量转换$y为float,则解释器使用浮点除法而不是整数除法.

因为在两个整数变量上使用整数除法是默认的假设.

如果您使用 $y = 13.0(浮点变量作为分母)则不同:结果始终是浮点数

  • 请解释您的答案如何解决问题,以便将来的访问者可以从这个问题中受益. (2认同)