我想砍掉我的浮点数,我发现php doc。首先,我希望我的值始终为10000,所以我的函数将会这样做。
function floorDec($value = 0, $decimals = 2) {
$c = pow(10, $decimals);
$a1 = $value / 10000;
printf("a1: %lf, type: %s\n", $a1, gettype($a1));
$a2 = $a1 * $c;
printf("a2: %lf, type: %s\n", $a2, gettype($a2));
$a3 = floor($a2);
printf("a3: %lf, type: %s\n", $a3, gettype($a3));
$a4 = $a3 / $c;
printf("a4: %lf, type: %s\n", $a4, gettype($a4));
return $a4;
}
$a = 96684700;
var_dump(floorDec($a, 2));
结果
a1: 9668.470000, type: double
a2: 966847.000000, type: double
a3: 966846.000000, type: double
a4: 9668.460000, type: double
float(9668.46)
变量$a3
不是我想要的。我不知道为什么。谢谢你的帮助。
答案 0 :(得分:3)
PHP表现正常。这只是浮点数表现方式的副作用 它们有时只是有点不准确:
printf("%.99f", $a2);
打印
966846.99999999988358467817306518554687500000000000000000000
当然,如果你floor()
认为它是966846。
也许(int)round($a2);
可以满足您的需求:
966847.00000000000000000000000000000000000000000000000000000
如果您需要绝对精度到一定的小数点,请查看以下函数:https://secure.php.net/manual/en/ref.bc.php