每天我们需要根据投资金额和资产净值这两个变量来计算分配的单位数。我们现在正在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位数字,并且不应该将结果四舍五入。
在使用floor()
时不需要添加0.5。这可以将值移动到下一个最大值,这是你在做除法时不希望看到的。
从你刚刚做的例子:
floor($var3 * 10000) / 10000
给了我正确的结果,应该可以正常工作。
使用Round - float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
。
您需要传递PHP_ROUND_HALF_DOWN
作为第三个参数(Mode)。
round($value, 4, PHP_ROUND_HALF_DOWN);
如果模式参数在你的PHP版本中不可用(因为它不适合我),那么使用这个:
floor($value * 10000) / 10000;