我们每天都需要根据投资金额和资产净值这两个变量来计算分配的单位数。我们现在在Excel中使用舍入功能,我试图在PHP中实现,但它有时会将结果四舍五入。
In Excel:
Cell A1 = 287011570.56
Cell B1 = 14.9482
Cell C1 = =ROUNDDOWN(A1/ROUND(B1,4),4)
= 19200410.1202
In PHP:
<?php
$var1=287011570.56;
$var2=14.9482;
$var3=$var1/$var2;
$var4 = floor(($var3) * 100000 + .5) * .00001;
$var5 = intval($var4);
$var6 = strlen($var5)+5;
$test = substr("$var4", 0, $var6);
print "$test";
?>
结果:19200410.1203
结果应该包含小数点后的4位数字,它不应该对结果进行舍入。
提前致谢。
答案 0 :(得分:1)
使用Round - float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
。
您需要将PHP_ROUND_HALF_DOWN
作为第三个参数(模式)传递。
round($value, 4, PHP_ROUND_HALF_DOWN);
如果您的PHP版本中没有mode参数(因为它对我不起作用),请使用:
floor($value * 10000) / 10000;
答案 1 :(得分:1)
使用floor()
时,您不需要添加0.5。这可以将值移动到您在进行除法时不需要的下一个最高值。
从你的例子开始:
floor($var3 * 10000) / 10000
给我正确的结果并且应该正常工作。