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(浮点变量作为分母)则不同:结果始终是浮点数